LeetCode258 各位相加
阿新 • • 發佈:2018-12-16
題目
給定一個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。
示例
輸入: 38 輸出: 2 解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。
進階: 你可以不使用迴圈或者遞迴,且在 O(1) 時間複雜度內解決這個問題嗎?
C++程式碼
普通方法:
class Solution { public: int addDigits(int num) { if(num<=0) return num; vector<int> nums; do { getnums(nums, num); num = getsum(nums); }while(nums.size()-1) return num; } void getnums(vector<int> &num,int n) { num.clear(); while(n) { num.push_back(n%10); n/=10; } } int getsum(vector<int> &num) { int sum=0; for(vector<int>::iterator iter=num.begin();iter!=num.end();iter++) { sum+=*iter; } return sum; } };
不使用迴圈或者遞迴,且在 O(1) 時間複雜度內的方法。。。 (n - 1) % 9 + 1 但是我沒弄明白。。。找規律是這樣的,但是吧,讓我自己想我肯定想不出來有這個規律。。。