每天一道easy题:
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.
这道题的朴素方法好实现,这里讨论O(1)复杂度的实现:
通过枚举一系列的数字出来,可以发现其实结果是有规律的。结果范围在[0,9],并且是从1开始,以9为周期循环的,如下表。
数字 | 结果 |
---|---|
1 | 1 |
2 | 2 |
… | … |
9 | 9 |
10 | 1 |
… | … |
3789 =27 | 9 |
3790 =19 =10 | 1 |
3791 =20 | 2 |
3792 =21 | 3 |
… | … |
3798 =27 | 9 |
3799 =28 =10 | 1 |
3800 =11 | 2 |
3801 =12 | 3 |
… | … |
3807 =18 | 9 |
3808 =19 =10 | 1 |
3809 =20 | 2 |
既然如此,那我们直接将输入结果对9取余即可。
不过这里有两个例外就是,本身能够被9整除的数,结果应该是9而不是0。而且n为0时,结果应该为0,而不是9。因此,最后的代码为:
int addDigits(int num) {
if(num == 0)
return 0;
else if(num%9 ==0)
return 9;
else
return num%9;
}