您的位置:首页 > 编程语言 > Java开发

【LintCode-569】各位相加(Java实现-循环/递归算法/O(1))

2017-11-05 17:22 453 查看


循环算法代码记录:

public static int addDigits(int num) {
String numString=num+"";
int length=numString.length();
int sum=num;
while(length!=1){
sum=0;
for(int i=0;i<length;i++){
sum+=Integer.parseInt(numString.charAt(i)+"");
}
numString=sum+"";
length=numString.length();
}
return sum;
}


递归算法代码记录:

public int addDigits(int num) {
String numString=num+"";
int length=numString.length();
int sum=0;
while(length>0){
sum+=Integer.parseInt(numString.substring(length-1,length));
length--;
}
if(sum>=10){
return addDigits(sum);
}else{
return sum;
}
}


O( 1 )代码记录:

public static int addDigits(int num) {
return num==0?0:num%9 == 0?9:(num%9);
}


个人解题思路:

循环算法与递归算法都是通过将各个“位数“上的值相加,判断所得结果是否符合要求,如果不符合:

1.递归:将所得结果当成参数传入addDigits(sum);

2.循环:将所得结果值当做被处理参数 numString=sum+”“; length=numString.length();

O( 1 ):找规律? 。。。 我也不知道为什么除9取余就刚好是答案了啊。。。

如果您有更好的解法,欢迎您在留言区补充,感谢!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: