題目:
給定一個非負整數 num
,反覆將各個位上的數字相加,直到結果爲一位數。
示例:
輸入:38
輸出: 2 解釋: 各位相加的過程爲:3 + 8 = 11
,1 + 1 = 2
。 由於2
是一位數,所以返回 2。
進階:
你可以不使用循環或者遞歸,且在 O(1) 時間複雜度內解決這個問題嗎?
Python代碼1:
class Solution:
def addDigits(self, num):
while num > 9:
s = 0
while num >= 1:
s += num % 10
num //= 10
num = s
return num
Python代碼2:
class Solution(object):
def addDigits(self, num):
return 0 if num == 0 else (num-1) % 9 + 1
心得:第一種方法是常規解法,但是速度比較慢,第二種解法是樹根算法,速度爲O(1),具體算法內容可以查看博客。