leetcode 258. 各位相加

【題目】258. 各位相加

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

示例:

輸入: 38
輸出: 2 
解釋: 各位相加的過程爲:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。

進階:你可以不使用循環或者遞歸,且在 O(1) 時間複雜度內解決這個問題嗎?

【解題思路1】循環

class Solution {
    public int addDigits(int num) {
        while (num >= 10) {
            int next = 0;
            while (num != 0) {
                next = next + num % 10;
                num /= 10;
            }
            num = next;
        }
        return num;
    }
}

【解題思路2】遞歸

class Solution {
    public int addDigits(int num) {
        if (num < 10) {
            return num;
        }
        int next = 0;
        while (num != 0) {
            next = next + num % 10;
            num /= 10;
        }
        return addDigits(next);
    }
}

【解題思路3】數學方法

  • n 是 0 ,數根就是 0。
  • n 不是 9 的倍數,數根就是 n 對 9 取餘,即 n mod 9。
  • n 是 9 的倍數,數根就是 9。
    可以通過 (n-1) mod 9 + 1 這個式子把上邊的幾種情況統一起來。
class Solution {
    public int addDigits(int num) {
        return (num - 1) % 9 + 1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章