题目:
Given an integer num
, repeatedly add all its digits until the result has only one digit, and return it.
Example 1:
Input: num = 38 Output: 2 Explanation: The process is 38 --> 3 + 8 --> 11 11 --> 1 + 1 --> 2 Since 2 has only one digit, return it.
Example 2:
Input: num = 0 Output: 0
Constraints:
0 <= num <= 2^31 - 1
Follow up: Could you do it without any loop/recursion in O(1)
runtime?
思路:
题目很简单,但是follow up属于找规律。如果一个三位数num,num = 100a + 10b + c,下一轮为a + b + c,等于(100a + 10b + c) %9。因此可以发现,如果模9正好除尽,则一定为9,否则为模下的余数,当然要把特殊值0先排除。
代码:
class Solution {
public:
int addDigits(int num) {
if (num == 0)
return 0;
int tmp = num % 9;
return tmp ? tmp : 9;
}
};