给定一个非负整型数字,重复相加其所有的数字直到最后的结果只有一位数。
例如:
给定sum = 38,这个过程就像是:3 + 8 = 11,1 + 1 = 2,因为2只有一位数,所以返回它。
紧接着:
你可以4不用循环或递归在O(1)时间内完成它吗?
原文
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. For example: Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it. Follow up: Could you do it without any loop/recursion in O(1) runtime?
例:15367= 1*(9999+1) +5*(999+1)+3*(99+1)+6*(9+1)
= (1+5+3+6+7) + 1*9999+5*999+3*99+6*9
= 22+9*k = 2*(9+1)+2 +9*k= 2+2+(2*9+9*k) = 4+9*m
从以上的例子看出,任何一个10进制的数字根都是数字根+9的倍数
所以JAVA代码可以写成 :
public class Solution {
public int addDigits(int num) {
if(num==0) return 0;
if (num%9==0)
return 9;
else return num%9;
}
}
简化下 就是
public class Solution {
public int addDigits(int num) {
return 1 + (num-1) % 9;
}
}