目录
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
寻常方法(循环)
class Solution {
public int addDigits(int num) {
int res;
while(true) {
res = 0;
while(num > 0){
int tmp = num % 10;
res += tmp;
num /= 10;
}
num = res;
if (num < 10) break;
}
return num;
}
}
特别方法
class Solution {
public int addDigits(int num) {
return (num-1) % 9 + 1;
}
}
思路
num = x*100+y*10+z = x*99+y*9+x+y+z
1.若num%9=0,则x+y+z%9=0, 也就是num的各位数加起来能被9整除
2.若num%9不等于0,则num%9=x+y+z%9
if(num > 0 && num % 9 == 0) return 9;
return num % 9;
缩成一句话就是
return (num-1) % 9 + 1;