
题目链接
题目描述:
给定一个非负整数 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)。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)