题目链接:https://leetcode.com/problems/add-digits/
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?
Hint:
- A naive implementation of the above process is trivial. Could you come up with other methods?
- What are all the possible results?
- How do they occur, periodically or randomly?
- You may find this Wikipedia article useful.
思路:这是一道数学可以解的问题,只需要一个公式,value = 1 + (n-1)%9; 也就是说这题只需要一行代码,其原理是在数学中任何可以被9整除的数, 其数字相加同样可以被9整除. 而要求的结果范围同样是[0, 9], 因此问题就转化为除余的问题.
就再写一个转换成字符串处理的吧.
代码如下:
class Solution {
public:
int addDigits(int num) {
string tem = to_string(num);
while(tem.size() > 1)
{
int sum = 0;
for(auto val: tem) sum += val-'0';
tem = to_string(sum);
}
return stoi(tem);
}
};