给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。
样例
给出 num = 38。
相加的过程如下:3 + 8 = 11,1 + 1 = 2。因为 2 只剩下一个数字,所以返回 2。
挑战
你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?
递归法:
class Solution:
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
sum = 0
for i in list(str(num)):
sum += int(i)
if sum < 10:
return sum
else:
return self.addDigits(sum)
进阶:
若数为9的倍数,则结果为9,若不是则各位相加的结果为对九取余.
class Solution:
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
if num == 0:
return 0
ret = num % 9
if ret == 0:
return 9
else:
return ret