Skip to content

Latest commit

 

History

History
52 lines (44 loc) · 1.11 KB

258. 各位相加.md

File metadata and controls

52 lines (44 loc) · 1.11 KB

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例:

输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。

solution:

/**
 * @param {number} num
 * @return {number}
 */
var addDigits = function(num) {
    if (num < 10) return num
    else {
        let count = 0
        while(num > 0) {
            const temp = num % 10
            count += temp
            num = parseInt(num / 10)
        }
        return addDigits(count)
    }
};

对于无敌的O(1)解法,则要有一点找规律的思维

参考O(1)解法思路

6000=9* 666+6; 500=9* 55+5; 20=9* 2+2; 3=9* 0+3; 即 m* 10^n/9=9* C+m (C为常数,n为指数部分)很容易证明 故6523=666* 9+55* 9+2* 9+0* 9+(6+5+2+3) =666* 9+55* 9+2* 9+0* 9+1* 9+6, 6即为输出

/**
 * @param {number} num
 * @return {number}
 */
var addDigits = function(num) {
    return (num - 1) % 9 + 1
};