258. Add Digits
- Total Accepted: 127957
- Total Submissions: 257201
- Difficulty: Easy
Given a non-negative integer num
, repeatedly add all its digits until the result has only one digit.
For example:
Given num = 38
, the process is like: 3 + 8 = 11
, 1 + 1 = 2
. Since 2
has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
给你一个数,将这个数的各个位相加,直到这个数只有一位
经典的数字根问题,之前做过,就是看能不能除开9,下面给出具体证明
设一个数是abcde,则abcde = a * 10000 + b * 1000 + c * 100 + d * 10 + e,将这个式子拆一下得到(a + b + c + d + e) + (a * 9999 + b * 999 + c * 99 + d * 9),
显然右侧括号的式子可以整除9,所以num % 9的式子成立
需要注意的是特判0 和 9
public int addDigits(int num) {
if(num % 9 == 0){
if(num == 0)
return 0;
else
return 9;
}
while(num >= 9){
num %= 9;
}
return num;
}