问题
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
例子
思路
当<10时,直接返回
否则:结果为1~9
x
=
100
a
+
10
b
+
c
=
99
a
+
9
b
+
a
+
b
+
c
=
99
a
+
9
b
+
9
d
+
f
x=100a+10b+c=99a+9b+a+b+c=99a+9b+9d+f
x=100a+10b+c=99a+9b+a+b+c=99a+9b+9d+f
如果想要得到f,则需要x%9 ,结果为0~8,且当结果为0时,意为9的倍数,如18此时应为9
-
方法1
-
方法2
代码
//方法1
class Solution {
public int addDigits(int num) {
if(num<10) return num;
num = num%9;
if(num==0) return 9;
return num;
}
}
//方法2