给定一个非负数num,反复将各个位上的数字想加,直到结果为一位数。返回这个结果。
示例一:
输入:num=38
输出:2
解释:各位相加过程为:
38 --> 3+8 -->11
11 --> 1+1 -->2
示例二:
输入:num=0;
输出:0
解法一:模拟
思路和算法:
最直观的方法是模拟个位相加的过程,直到剩下的数字是一位数。计算一个整数的个位相加的做法是,每次计算当前整数除以10的余数得到最低数,将最低数加到总和中,然后将当前总数除以10。重复当前操作,直到当前整数大于0,此时总数的和即为原始各数相加的结果。
int addDigits(int num){
while (num>=10)
{
int sum=0;
while (num>0)
{
sum+=num%10;
num/=10;
}
num=sum;
}
return num;
}
时间复杂度:O(log num)
空间复杂度:O(1)