lintCode之Add Digits
题目描述
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.
样例
Given num = 38. The process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return 2.
思路分析
我的理解这道题主要是把大于10的数个位和十位数进行求和,得到的结果如果大于10,再进行同样的求和,题目的理解不难,对于如何求解请看下面的代码展示
public class Solution {
/**
* @param num a non-negative integer
* @return one digit
*/
public int addDigits(int num) {
while(num/10>0){//判断是否符合题目要求
int sum = 0;
while(num>0){
sum += num%10;//num%10得到个位数
num /= 10;
}
num = sum;
}
return num;
}
}
对于更简单的方法可以分析一下各个数的特点
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 1
11 2
12 3
13 4
14 5
15 6
.
.
.
可以看出来,9个数为一个循环,初步可以得出结果为 num%9。但是发现num为9的话结果就为0,所以可以改成(num-1)%9+1
所以代码也可以写成
public class Solution {
/**
* @param num a non-negative integer
* @return one digit
*/
public int addDigits(int num) {
return (num-1)%9+1;
}
}