python leetcode 66加一問題

2021-09-26 15:13:34 字數 2623 閱讀 2059

給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。

最高位數字存放在陣列的首位, 陣列中每個元素只儲存乙個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入: [1,2,3]
輸出: [1,2,4]

解釋: 輸入陣列表示數字 123。

示例 2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]

解釋: 輸入陣列表示數字 4321。

看到題目覺得非常簡單 只需要找到list的最後乙個下標位置使其加一 即可。

然而天真如我 下面情況才是這題的重點

輸入: [9,9,9]
輸出: [1,0,0,0]

解釋: 輸入陣列表示數字 999。

需要考慮進製的情況

重新思考:

筆者想到的是先將陣列數字轉為十進位制數字,然後加一,接著按位取模得到每一位的值。

上**(花費時間48ms)擊敗70%

在學習過程中有什麼不懂得可以加

我的python學習交流扣扣qun,688244617

群裡有不錯的學習教程、開發工具與電子書籍。

與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容。

1import math

2class

solution:3

defplusone

(self, digits):4

""" 5 :type digits: list[int]

6 :rtype: list[int]

7 """

8 a=

19 num=

010 lens=

len(digits)

11for i in

range

(lens-1,

-1,-

1):12 num=num+digits[i]

*a13 a=a*

10#獲得list的十進位制數字

14 num=num+115

16bytes

=int

(math.log10(num)

)#計算數字的位數

17 lens_new=

bytes+1

18 result=

1920

for i in

range

(lens_new)

:21 single=

int(num/(10

**(bytes

-i))

)#得到每一位的數字

23 num=num-single*

10**

(bytes

-i)#將得到的位數減去

24return result

2526

if __name__==

"__main__"

:27 s=solution(

)28 a=[9

,9,9

]29print

(s.plusone(a)

)

然後舉出比較正常的方法

思路:對每個值遍歷判斷,如果為9則變為0,並且繼續遍歷,如果為0到8則加1操作,並且break退出判斷

上**(用時44ms)擊敗98%

1

class

solution:2

defplusone

(self,digits):3

""" 4 :param digits:list[int]

5 :return:list[int]

6 """7#

8for i in

range(1

,len

(digits)+1

):#對每乙個值遍歷9if

(digits[

-i]==9)

:#如果為9則變為0

10 digits[

-i]=011

else

:#如果加1則退出

12 digits[

-i]+=113

break

14if

(digits[0]

==0):

#如果全都是9那麼第一位為1後面加乙個0

15 digits[0]

=1#eg:[9,9,9] --> [1,0,0,0]0)

17return digits

18if __name__==

"__main__"

:19 s=solution(

)20 a=[5

,9,8

]21print

(s.plusone(a)

)

python leetcode 6 Z 字形變換

將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n 之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiiged...

python leetcode 最大回文數

直接暴力求解時間超出,選取manacher演算法 class solution def longestpalindrome self,s t join s 前後插入 是為了防止越界,不需要進行邊界判斷 n len t p 0 n 每一處的回文半徑 c r 0 r為當前訪問到的最右邊的值,c為此時對稱...

python LeetCode 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null ...