題目
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?
想法
把數字拆解,加起來,超過10的話就要重複步驟,可用迴圈或遞迴,O(1)解要另外想。
code
while loop
int addDigits(int num) {
int digit = 0;
while (1) {
if (num > 0) {
digit += num%10;
num/=10;
}
else if (num == 0 && digit >= 10){
num = digit;
digit = 0;
} else if (digit < 10) {
break;
}
}
return digit;
}
recursive
int re(int num) {
if (num <10) {
return num;
} else {
return re(num%10+num/10);
}
}
int addDigits(int num) {
return re(num);
}
O(1)
int addDigits(int num) {
if (num == 0)
return num;
else if (num % 9 == 0)
return 9;
else
return num%9;
}