LeetCode 258 各位相加

2022-07-07 02:18:14 字數 1064 閱讀 3734

給定乙個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。

示例:

輸入: 38

輸出: 2

解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。

高階:

你可以不使用迴圈或者遞迴,且在 o(1) 時間複雜度內解決這個問題嗎?

思路:

正常解法,因為題目沒有給任何長度限制,也不知道後端是什麼情況,姑且用大整數進行儲存吧...所以,這一題我就直接用大整數儲存,然後不斷進行遍歷求和,直到大整數的長度為1停止,還挺簡單的~

o(1)解法:我覺得吧,正常情況下除非從0開始寫個一二十個數,才能找到規律,找到規律之後當然就簡單了,就是這個數如果能被9整除,那麼和必為9(0除外,0的和就是0),否則為這個數除9之後的餘數,這是看的大佬的解答,反正我是找不到t-t。

**:

正常解:

1

struct

bign210

};11

12 bign change(int

a)13

20while(a!=0

);21

return

b;22}23

24class

solution

37//

處理進製

38 b.d[b.len++]=carry%10+'0'

;39 carry/=10;40

while(carry!=0)41

45//

將結構體b複製給a

46for(int i=0;ii)

4750 a.len=b.len;51}

52return a.d[0]-'0'

;53}54 };

o(1)解:

1

class

solution

10 };

LeetCode 258 各位相加

題目描述 給定乙個非負整數num 反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38 輸出 2 解釋 各位相加的過程為 3 8 11,1 1 2。由於 2 是一位數,所以返回 2。解題思路 輸入的數為非負數,當輸入的數為個位數的時候不用疊加直接輸出 ac 1 int adddigits i...

LeetCode 258 各位相加

給定乙個非負整數num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38輸出 2解釋 各位相加的過程為 3 8 11,1 1 2。由於2是一位數,所以返回 2。class solution def adddigits self,num type num int rtype int sum...

LeetCode 258 各位相加

給定乙個非負整數num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38輸出 2解釋 各位相加的過程為 3 8 11,1 1 2。由於 2 是一位數,所以返回 2。高階 你可以不使用迴圈或者遞迴,且在 o 1 時間複雜度內解決這個問題嗎?emmm,拿到這道題,瞬間就想到了迴圈的解法,感嘆...