LT简单题258-各位相加

LT简单题258-各位相加,第1张

题目链接

题目描述:

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

示例 1:

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

输入: num = 0
输出: 0

方法一:数学(C++代码)

分析:

我们对 num 分类讨论:

num 不是 9 的倍数时,其数根即为 num 除以 9 的余数。

num 是 9 的倍数时:

如果 num=0,则其数根是 0;

如果 num>0,则各位相加的结果大于 0,其数根也大于 0,因此其数根是 9。

class Solution {

public:

    int addDigits(int num) {               //方法一:数学

        if(num == 0){

            return 0;

        }else if(num % 9 == 0){

            return 9;

        }else{

            return num % 9;

        }

    }

};

时间复杂度:O(1),空间复杂度:O(1)。

方法二:模拟(C++代码)

class Solution {

public:

    int addDigits(int num) {               //方法二:模拟

        while(num >= 10){

            int sum = 0;

            while(num > 0){

                sum += num % 10;

                num /= 10;

            }

            num = sum;

        }

        return num;

    }

};

时间复杂度:O(lognum),空间复杂度:O(1)。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/797679.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存