方法1:反复各位相加
时间复杂度:$O(logN)$
由于num最多为2^31 - 1, num各位加起来最大为82。对于任意两位数最多只需要计算两次各位相加的结果即可得到一位数。所以时间复杂度只取决于num的位数,而求一个数的位数的时间复杂度为logN。
空间复杂度:$O(1)$
解题思路
Java 代码
class Solution {
public int addDigits(int num) {
while (num >= 10) {//直到num为个位数结束
int sum = 0;//用sum临时保存
while (num > 0) {//反复取最后一位,直到取完
sum += num % 10;
num /= 10;
}
num = sum;
}
return num;
}
}