每日刷題 各位相加

2021-09-09 07:20:29 字數 1068 閱讀 7116

示例:

輸入: 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...