给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入:38
输出: 2 解释: 各位相加的过程为:3 + 8 = 11
,1 + 1 = 2
。 由于2
是一位数,所以返回 2。
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
思路:获得num的每一位数,对其逐个求和; 重复这一过程知道和小于10
1 class Solution { 2 public: 3 vector<int> getnum(int num){ 4 vector<int> ans; 5 while(num){ 6 ans.push_back(num%10); 7 num/=10; 8 } 9 return ans; 10 } 11 int addDigits(int num) { 12 while(num>=10){ 13 vector<int> temp = getnum(num); 14 int sum = 0; 15 for(int i=0; i<temp.size(); i++) sum += temp[i]; 16 num = sum; 17 } 18 return num; 19 } 20 };
不再单独的去获取num的每一位,直接把每一位相加
class Solution { public: int addDigits(int num) { int sum = 0; while(true){ sum += (num%10); num /= 10; if(num==0) { num = sum; sum = 0; if(num<10) return num; } } } };