求star

开源不易,喜欢请点个star吧

Ocean Han
254 字
1 分钟
Leetcode->各位相加
2022-07-19

题目#

给定一个非负整数 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/各位相加/
作者
Ocean Han
发布于
2022-07-19
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49