前言
持续更新了
正文
问题来源
本问题来自leetcode上的258题。
问题描述
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例 1:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
分析:
递归调用
int addDigits(int num)
{
int temp=0;
while(num>=10)
{
temp+=(num%10);
num/=10;
}
temp+=num; //不要忽略最高位数
num=temp;
if(num>=10)
{
num=addDigits(num);//num仍大于10,则递归调用addDights函数
}
return num;
}
数字根
其中公式为:
|- 0 if n == 0
dr(b, n) = |
|- 1+((n-1)mod(b-1)) if n != 0
以b进制
然后可以写出如下代码
func addDigits(num int) int {
if num == 0 {
return 0
}
return 1 + (num-1) % 9
}
可以去掉if判断
func addDigits(num int) int {
return 1 + (num-1) % 9 // num等于0时,-1 % 9 = -1,所以返回0
}
总结:
勤思考。
结语
不管怎么样好好加油。