给定一个非负整数 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
};