leetcode258各位相加

leetcode 258 Add Digits

Posted by BY on June 26, 2020

前言

持续更新了

正文

问题来源

本问题来自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
}

总结:

勤思考。

结语

不管怎么样好好加油。