Description:
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?
Solution:
1. 最直接的方法是把
num的每一位取出,相加,然后判断是否 < 10即可,具体实现如下:
class Solution {
public:
int addDigits(int num) {
while (num >= 10) {
num = (num % 10) + (num / 10);
}
return num;
}
};
2. 这个方法是在体现了Leetcode人道主义精神的Hint下得出的,这个算法是基于数根(Digital Root)这个定义的,详见百度百科:
点击打开链接
具体实现如下(一行代码完成):
class Solution {
public:
int addDigits(int num) {
return (num-1) % 9 + 1;
}
};
运行结果: