来源Leetcode第258题
给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。
示例:
1 | 输入: 38 |
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
暴力
按照题意暴力运算
1 | public int addDigits(int num) { |
取余
X = 100*a + 10*b + c = 99*a + 9*b + (a+b+c);所以对9取余即可。
但是要注意当X是9的倍数时,即(a+b+c)也是9的倍数,这时候返回9即可,因为只要是9的倍数,其各位相加一定为9,否则返回X % 9.
1 | public int addDigits(int num) { |
大佬的精简代码
public int addDigits(int num) {
return (num-1)%9+1;
}