1. 程式人生 > >leetcode 258 各位相加 ------

leetcode 258 各位相加 ------

給定一個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。

示例:

輸入: 38
輸出: 2
解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。
進階:
你可以不使用迴圈或者遞迴,且在 O(1) 時間複雜度內解決這個問題嗎?

思路,題幹要求輸出結果為1位數,且時間複雜度為O(1),因此考慮原資料直接對某個數求餘數:假設二位數ab,則ab=(a10 +b)=(a9+a+b),因此ab%9 = (a+b)%9,找到了將ab與a+b對應的關係,此時用ab%9能滿足要求,但是當輸入數為9的倍數時不滿足情況,因此將原資料進行如下處理:
(ab-1)%9 +1

def addDigits(self, num):
    if num <= 0:
        return 0
    else:
        return((num-1)%9 +1)