题目:
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?
分析:
如果时间复杂度要求是O(1),那么可以进行如下分析:
数字 | 结果 |
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | 1 |
11 | 2 |
12 | 3 |
13 | 4 |
14 | 5 |
15 | 6 |
16 | 7 |
17 | 8 |
18 | 9 |
19 | 1 |
20 | 2 |
21 | 3 |
22 | 4 |
23 | 5 |
24 | 6 |
25 | 7 |
26 | 8 |
27 | 9 |
28 | 1 |
29 | 2 |
那么代码如下:
int addDigits(int num) {
if(num==0)return 0;
if(num%9)return num%9;
else return 9;
}
还有一个代码更加简单,如下:
int addDigits(int num) {
return (num - 1) % 9 + 1;
}