如果使用循环:
class Solution {
public:
int addDigits(int num) {
int sum = num;
while(num >= 10){
sum = 0;
while(num){
int p = num % 10;
num = num / 10;
sum += p;
}
num = sum;
}
return sum;
}
};
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
那这应该就是一个数学题了,找找规律,居然就蒙出来了:
class Solution {
public:
int addDigits(int num) {
return (num-1)%9 + 1;
}
};
至于怎么证明:
n = x ∗ 100 + y ∗ 10 + z = x ∗ 99 + y ∗ 9 + x + y + z n = x*100+y*10+z=x*99+y*9+x+y+z n=x∗100+y∗10+z=x∗99+y∗9+x+y+z
%9之后就只剩下最后的位数了,增加位数1000,10000都是一样的思路。