Question:
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?
Code:
方法一:最直观的解法就是去拆解各个位置上的数字,不停求和拆解,直到满足条件 虽然不满足条件,但是还是写出来。
方法二:逐位相加直到小于10
方法三:找规律
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
每9个一循环, 然而 9除9取模为0,不符合实际
转化为 (n-1)%9 + 1 ;
// 方法一
public class Solution {
public int addDigits(int num) {
if(num > 10){
num = getSum(num);
}
return num ;
}
/* 求得各个位置的数,并求和 */
public int getSum(int num){
int sum = 0 ;
for(char c : String.valueOf(num).toCharArray()){
sum += c - '0' ;
}
return sum ;
}
}
// 方法二
public class Solution {
public int addDigits(int num) {
while(num > 9){
num = num/10 + num%10 ;
}
return num ;
}
}
// 方法三
public class Solution {
public int addDigits(int num) {
return (num-1)%9 + 1 ;
}
}
python
class Solution(object):
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
if (num==0):
return num ;
return (num-1)%9+1;
JS
/**
* @param {number} num
* @return {number}
*/
var addDigits = function(num) {
return (num-1)%9 +1;
};