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
依次写出一些数的结果
比如0-9的结果是0-9
10-18的结果是1-9
19-27的结果是1-9
因此就总结规律结果除了第一个0,总是1-9的循环
0 1-9 1-9 1-9...
寻找在1-9中的第几个
int addDigits(int num)
{
if (num ==0)
return 0;
return (num - 1) % 9+1;
}
常规做法循环迭代
int addDigits(int num)
{
int t;
while (num > 9)
{
t = 0;
while (num>0)
{
t += num % 10;
num /= 10;
}
num = t;
}
return num;
}