1. 程式人生 > >[leetcode]各數相加[javascript]

[leetcode]各數相加[javascript]

https://leetcode-cn.com/problems/add-digits/

描述

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

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

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

分析

最容易想到的是暴力遞迴,這裡就不展示了…

這其實是一道數學題

將一個正整數的各個數位的數字求和,直到和為一位數為止,這個數被稱為原數的『數根
**兩個正整數數根相同,意味著它們兩個除以9的餘數相同。**確切地說,一個數的數根就是它除以9的餘數(數根為9時例外,原數除以9餘0)。



這樣就可以一行程式碼解決問題

var addDigits = function(num) {
  return (num - 1) % 9 + 1
};

參考資料

https://www.zhihu.com/question/31385290