题目
思路
一开始想的比较简单,递归求每次的各位数字之和,直到和小于10。然后考虑了O(1)复杂度下的方法,在循环求和时,每次都将求和结果拆成当前位和进位两个数,这样可以保证始终求和都是个位数。
代码
递归:
class Solution {
public:
int addDigits(int num) {
while(num>9)
{
int temp=0;
while(num)
{
temp+=num%10;
num/=10;
}
num=temp;
}
return num;
}
};
O(1)复杂度:
class Solution {
public:
int addDigits(int num) {
int dis=0;
while(num)
{
int temp=dis;
temp+=num%10;
dis=temp/10+temp%10;
num/=10;
}
return dis;
}
};