示例:高階:輸入: 38
輸出: 2
解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。
你可以不使用迴圈或者遞迴,且在o(1)時間複雜度內解決這個問題嗎?
解答:方法一:用棧。見**。
方法二:既然題目說能在o(1)時間複雜度內解決問題。那麼必然存在公式解。題目要求最後結果為一位數字,則必然處於0~9之間的某乙個數字, 這裡採用數字根法。
數根公式:當 n = 0 時,數根為 0 ; 當 n ≠ 0 且 n % 9 = 0 時, 數根為 9 ; 其餘情況為 n % 9;
上述公式簡化為:數根 = 1 + (n-1) mod 9.
**:方法一:
int
adddigits
(int num)}if
( record.
size()
==1&& record.
top(
)<10)
return record.
top();
int k1 = record.
top();
record.
pop();
int k2 = record.
top();
record.
pop();
record.
push
( k1 + k2);}
return record.
top();
}
執行結果:
**:方法二
int
adddigits
(int num)
執行結果在此略過。
2018 10 25 各位相加
給定乙個非負整數num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38輸出 2解釋 各位相加的過程為 3 8 11,1 1 2。由於2是一位數,所以返回 2。高階 你可以不使用迴圈或者遞迴,且在 o 1 時間複雜度內解決這個問題嗎?class solution object def a...
LeetCode 各位相加
給定乙個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38 輸出 2 解釋 各位相加的過程為 3 8 11,1 1 2。由於 2 是一位數,所以返回 2。高階 你可以不使用迴圈或者遞迴,且在 o 1 時間複雜度內解決這個問題嗎?思路分析 直接遞迴或者迴圈。遞迴版class...
258 各位相加
給定乙個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38 輸出 2 解釋 各位相加的過程為 3 8 11,1 1 2。由於 2 是一位數,所以返回 2。高階 你可以不使用迴圈或者遞迴,且在 o 1 時間複雜度內解決這個問題嗎?遞迴 c class solution re...