给出一个数字,每位的数字求和,直到求到的和只有一位
思路:
1.loop
从低位到高位,每位的数字可用num%10来求得
去掉最低位的数字,用num/10来求得
当num<10时,说明只有一位,返回即可
class Solution {
public int addDigits(int num) {
if(num == 0) return 0;
while(num >= 10) {
num = add(num);
}
return num;
}
int add(int num) {
if(num == 0) return 0;
int sum = 0;
while(num >= 10) {
sum += num % 10;
num /= 10;
}
sum += num;
return sum;
}
}
2.数学法
O(1)复杂度。
原理不太清楚,但是观察一下确实是这样的。
先排除0.
然后,能被9整除的,各位数字和一定是9.
不能被9整除的,各位数字和是除9的余数。
public int addDigits(int num) {
if(num == 0) return 0;
if(num % 9 == 0) return 9;
else return num % 9;
}