【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取余就刚好是答案了啊。。。
如果您有更好的解法,欢迎您在留言区补充,感谢!!
相关文章推荐
- Java实现-各位相加
- 【LintCode 简单】569. 各位相加
- 在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?
- Java实现大整数相加
- java实现大整数相加
- java实现 数组中两个元素相加等于指定数的所有组合
- java 实现任意位数相加!
- 大数相加,分别用C++和Java实现
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- java实现读入一个数n,计算其各位数字之和,用汉语拼音写出和的每一位数字
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- Java链表形式实现多项式相加
- 【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(所有根到叶子结点组组成的数字相加)】
- java 实现 不限长整形字符串 相加
- 在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?
- 【分享】JS超精简实现链表!拜请各位JAVA C# 大牛指点
- 第2章 Java编程基础——FAQ2.16 在实现x和y相加时, x+=y和x=x+y两种实现方式有区别吗?
- java中用ArrayList类实现正整数大数相加与相乘
- oracle实现数值型列值各位相加之和
- 【分享】JS超精简实现链表!拜请各位JAVA C# 大牛指点