LeetCode258. 各位相加Golang版
1. 问题描述
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
2. 思路
2.1. 思路1
- 设计一个函数,计算一个数各位相加的和
- 循环执行上述函数,直到和小于10
2.2. 思路2
X = 100 * a + 10 * b + c = (99 * a) + (9 * b) + (a+b+c)
a+b+c每次相对于X,减少n个9
因此结果只需要 n % 9取余数,如果恰好为0,返回9
3. 代码
3.1.思路1代码
func addDigits(num int) int {
if num < 10 {
return num
}
sum := countSum(num)
for sum >= 10 {
sum = countSum(sum)
}
return sum
}
func countSum(num int) int {
var sum int
for num != 0 {
pop := num % 10
sum += pop
num /= 10
}
return sum
}
3.2. 思路2代码
func addDigits(num int) int {
if num < 10 {
return num
}
num = num % 9
if num == 0 {
return 9
}
return num
}
本文介绍了解决LeetCode258题目的两种方法。题目要求反复将一个非负整数的各数位相加,直至结果为一位数。思路一采用循环计算每一位的和,思路二则利用数学规律快速得出答案。
1万+

被折叠的 条评论
为什么被折叠?



