leetcode之Add Digits(258)

題目:

給定一個非負整數 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),具體算法內容可以查看博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章