题目:
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.
Example:Input: 38 Output: 2 Explanation: The process is like: 3 + 8 = 11, 1 +1 = 2. Since 2 has only one digit, return it.
解释:
数字各个位不断相加,返回最终结果。
递归解法:
python代码:
class Solution:
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
num=sum(list(map(int,str(num))))
if len(str(num))==1:
return num
return self.addDigits(num);
非递归解法:
python代码:
class Solution:
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
#非递归解法双重while
while num>=10:
tmp=num
num=0
while tmp:
num+=tmp%10
tmp//=10
return num
c++代码:
class Solution {
public:
int addDigits(int num) {
while (num>=10)
{
int tmp=num;
num=0;
while(tmp)
{
num+=tmp%10;
tmp/=10;
}
}
return num;
}
};
总结:
不用递归或者循环的O(1)时间复杂度的解法不太懂。