题目描述:给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:
3 + 8 = 11
,1 + 1 = 2
。 由于2
是一位数,所以返回 2进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
思路:任意一个非负整数abcd,其中将任意一位x抽离出来视作个位数,抛弃它的权重,这个过程可以看做重复减9的行为。比如,非负整数10,将十位数1提取出视作个位数,就是减一个9;非负整数20,将十位数2提取出视作个位数,就是减两个9;所以总的来说,模9就是题目所述的操作的简化。不太一样的是,模9得到的结果是0-8,而题目中除0以外任何数经题目操作后得到的结果应该是1-9.所以如果模9后得到的是0那么应该改为9.
class Solution {
public int addDigits(int num) {
if(num==0) return 0;
if(num%9==0) return 9;
else {
return num%9;
}
}
}