给出一个非负整数 num
,反复的将所有位上的数字相加,直到得到一个一位的整数。
样例
给出 num
= 38。
相加的过程如下:3 + 8 = 11
,1 + 1 = 2
。因为 2
只剩下一个数字,所以返回 2
。
挑战
你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?
解题思路1:
递归法,简单有效。
class Solution {
public:
/**
* @param num: a non-negative integer
* @return: one digit
*/
int addDigits(int num)
{
// write your code here
if(num < 10)
return num;
int res = 0;
while(num)
{
res += num%10;
num /= 10;
}
addDigits(res);
}
};
解题思路2:
若不用循环或递归,则必须找出其数学规律,不用掌握,看看就行。通过枚举发现有规律,即若数为9的倍数,则结果为9,若不是则各位相加的结果为对九取余。
class Solution {
public:
/**
* @param num: a non-negative integer
* @return: one digit
*/
int addDigits(int num)
{
// write your code here
if(num == 0)
return 0;
int res = num % 9;
if(!res)
return 9;
else
return res;
}
};