给定一个非负整数 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
}
原因:
- 能够被9整除的整数,各位上的数字加起来也必然能被9整除,所以,连续累加起来,最终必然就是9。
- 不能被9整除的整数,各位上的数字加起来,结果对9取模,和初始数对9取摸,是一样的,所以,连续累加起来,最终必然就是初始数对9取摸。