给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入:38
输出: 2 解释: 各位相加的过程为:3 + 8 = 11
,1 + 1 = 2
。 由于2
是一位数,所以返回 2。
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
思路:找规律,O(1),0ms
f(0) = 0
f(1) = 1 f(10)=1
f(2)=2 f(11)=2
f(3)=3 f(12)=3
f(4)=4 f(13)=4
f(5)=5 f(14)=5
f(6)=6 f(15)=6
f(7)=7 f(16)=7
f(8)=8 f(17)=8
f(9)=9 f(18)=9
可以看出规律,用9去取余数,特殊情况0判断一下即可。
int addDigits(int num){
if(!num)
return 0;
if(num % 9 == 0)
return 9;
else
return num % 9;
}
进一步简化为:
int addDigits(int num){
if(num && num % 9 == 0)
return 9;
else
return num % 9;
}