Add Digits 各位相加
給定一個非負整數 num
,反覆將各個位上的數字相加,直到結果為一位數。
示例:
輸入:38
輸出: 2 解釋: 各位相加的過程為:3 + 8 = 11
,1 + 1 = 2
。 由於2
是一位數,所以返回 2。
進階:
你可以不使用迴圈或者遞迴,且在 O(1) 時間複雜度內解決這個問題嗎?
思路:這道題的笨辦法就不說了,說一個discuss裡面很厲害的方法,可以實現O(1)的複雜度。具體idea為:
假設N=(a[0] * 1 + a[1] * 10 + ...a[n] * 10 ^n),其中 a[0]...a[n] 都是在 [0,9] 之間的數字
我們設:M = a[0] + a[1] + ..a[n]
因為:
1 % 9 = 1
10 % 9 = 1
100 % 9 = 1
所以 N % 9 = a[0] + a[1] + ..a[n]
意味著 N % 9 = M
所以 N = M (% 9)
但是 9%9 = 0,所以這裡我們使用一點小技巧來解決 9%9=0的問題,我們設定取餘操作為: (n - 1) % 9 + 1
參考程式碼:
class Solution {
public:
int addDigits(int num) {
if (num == 0) return 0;
return (num - 1) % 9 + 1;
}
};
相關文章
- Add Strings 字串相加字串
- [LeetCode] 258. Add DigitsLeetCodeGit
- Leetcode 258. Add DigitsLeetCodeGit
- 258. Add Digits--LeetCode RecordGitLeetCode
- LeetCode每日一題: 各位相加(No.258)LeetCode每日一題
- LeetCode2: Add two numbers(兩數相加)LeetCode
- [LeetCode] Add Two Numbers 兩個數字相加LeetCode
- leetcode 兩數相加(add two numbers) Python程式設計實現LeetCodePython程式設計
- Codeforces 915C Permute DigitsGit
- ACL Beginner Contest E.Replace DigitsGit
- LeetCode- Count Numbers with Unique DigitsLeetCodeGit
- add exttrail 和add rmttail總結AI
- Facebook 面試題 | 字串相加面試題字串
- PHP字串數字相加PHP字串
- 2. 兩數相加
- [LeetCode] 402. Remove K DigitsLeetCodeREMGit
- URAL 1658. Sum of Digits(簡單dp)Git
- Atcoder ARC090F Number of DigitsGit
- git add all和git add .區別Git
- jQuery add()jQuery
- 【kickstart 2018 round A】 Even Digits PythonGitPython
- LeetCode——兩數相加LeetCode
- python中列表相加Python
- Leetcode兩數相加LeetCode
- 演算法-兩數相加演算法
- (陣列)大數相乘,相加陣列
- 二進位制字串相加字串
- 454_四數相加Ii
- 移位相加乘法器
- 神奇補0解決連結串列相加:LeeCode002兩數相加
- DataTransferItemList.add()
- git add errorGitError
- add field security
- HOME: Count Digits —— 計算字串中數字個數Git字串
- Codeforces Round #204 (Div. 2) A.Jeff and DigitsGit
- 程式設計題-兩數相加程式設計
- LeetCode 2——兩數相加LeetCode
- 【leetcode】【2、兩數相加】LeetCode