题目大意:
原题: https://leetcode.com/problems/add-digits/
有一个非负整数num,重复这样的操作:对该数字的各位数字求和,对这个和的各位数字再求和……直到最后得到一个仅1位的数字(即小于10的数字)。
例如:num=38,3+8=11,1+1=2。因为2小于10,因此返回2。
思路:
找规律:观察num第一次每个位置上相加的和,以及经过n次相加后得到的最终结果
第一次相加和 | 最后相加结果 |
0 | 0 |
1 | 1 |
3 | 2 |
4 | 3 |
5 | 4 |
6 | 5 |
7 | 6 |
8 | 7 |
9 | 8 |
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 |
.。。。。 | (num-1)%9+1 |
C++:
class Solution {
public:
int addDigits(int num) {
return 1+(num-1)%9;
}
};