【LeetCode笔记】258. 各位相加

165 阅读1分钟

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

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

只是一题简单题,也没有什么难度,不过看到题解里有个比较有意思的解答,记录一下。 先附上我的垃圾解法:

func addDigits(num int) int {
    var count int
    for num/10 != 0 {
        count = 0
        for num != 0 {
            count = count + num%10
            num = num/10
        }
        num = count
    }
    return num
} 

别人一行解决:

func addDigits(num int) int {
    return (num - 1) % 9 + 1
}

原因:

  1. 能够被9整除的整数,各位上的数字加起来也必然能被9整除,所以,连续累加起来,最终必然就是9。
  2. 不能被9整除的整数,各位上的数字加起来,结果对9取模,和初始数对9取摸,是一样的,所以,连续累加起来,最终必然就是初始数对9取摸。