栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LT简单题258-各位相加

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LT简单题258-各位相加

题目链接

题目描述:

给定一个非负整数 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)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号