题目:
Given a non-negative integer方法一:num
, repeatedly add all its digits until the result has only one digit. For example: Givennum = 38
, the process is like:3 + 8 = 11
,1 + 1 = 2
. Since2
has only one digit, return it. Follow up: Could you do it without any loop/recursion in O(1) runtime?
int addDigits(int num) {
int sum = 0;
while(num > 0)
{
sum += num%10;
num /= 10;
}
if(sum < 10)
{
return sum;
}
else
{
addDigits(sum);
}
}
while循环中将一个数的每一位加到sum中,每次都是将个位加上去,再除以10.
再判断sum是否小于10,大于10则递归.
方法二:
int addDigits(int num) {
if(num == 0)
return 0;
else if(num%9 == 0)
return 9;
else
return num%9;
}
如果能看出 最后的结果就是对9的余数,则只用O(1)的时间复杂度