254 字
1 分钟
Leetcode->各位相加
题目
给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
示例 1:
输入: num = 38
输出: 2
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。
提示:
0 <= num <= 231 - 1
解题:key:
①递归
/**
* @param {number} num
* @return {number}
*/
var addDigits = function (num) {
if (num < 10) {
return num
}
let t = 0
while (num) {
t += num % 10
num = Math.floor(num / 10)
}
return addDigits(t)
};
②数学方法-找规律
TIP 通过找规律发现:
- 假设一个三位数
abc
,它的值为100*a+10*b+1*c
,经过一次各位相加后,变为a+b+c
,差值为99*a+9*b
- 当
num
小于9时直接返回- 当
num
大于9时:
- 如果能被9整除,就返回9
- 如果不能,就返回余数
/**
* @param {number} num
* @return {number}
*/
var addDigits = function (num) {
if (num < 9) {
return num
}
return num % 9 === 0 ? 9 : num % 9
};
Leetcode->各位相加
https://blog.oceanh.top/posts/algorithm/各位相加/