leetcode Python實現 66 加一

2021-08-19 21:34:44 字數 1433 閱讀 8242

描述:給定乙個非負整數組成的非空陣列,在該數的基礎上加一,返回乙個新的陣列。

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

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

示例1

輸入: [1,2,3]

輸出: [1,2,4]

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

示例2

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

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

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

l = digits[::]

i = len(digits)-1

while i >= 0:

if l[i]+1

<=9:

l[i]+=1

return l

else:

if i == 0:

l[i] = (l[i]+1)%10

l.insert(0,1)

return l

elif l[i]+1 > 9:

l[i]=(l[i]+1)%10

if l[i-1]+1

< 10:

l[i-1] = l[i-1]+1

return l

else:

i-=1

先不說我的**,先看看別人的,如此乾淨利落!

if len(digits) == 0:

digits = [1]

elif digits[-1] == 9:

digits = self.plusone(digits[:-1])

digits.extend([0])

else:

digits[-1] += 1

return digits

我的思想太粗暴了,題目中說最後乙個數要加1.我就老老實實把最後乙個元素加一來判斷。分兩種情況:

1)加1以後小於9。

2)加1以後大於9。但是這個情況又涉及兩種情況:a.digits只有乙個元素,所以在index=0插入1。b.相加以後產生進製,若將進製加到前面一位數仍產生進製怎麼處理。

emmm…我jio得我對步驟的描述並不科學。

大神的就很簡潔。題目中也有說digits裡的數是1-9,所以只要判斷最後一位數是不是9就好。如果是9的話,那個位置就更改為0.而不用向我的一樣,再進行求餘運算。emmm。。。我把問題的範圍擴大了,我的程式可以求解1-18之間的數。這裡就兩種情況了:最後一位不是9;最後一位是9,那麼相加以後會產生進製,就得再接著判斷前一位是不是9.這裡可以採用迴圈(像我一樣)或者像大神一樣(採用遞迴)。遞迴的話可以嘗試單步除錯,有助於理解過程。

LeetCode Python 打家劫舍I

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...

leetcode Python編碼練習

貪心演算法 1.環形路上有n個加油站,第i個加油站的汽油量是gas i 你有一輛車,車的油箱可以無限裝汽油。從加油站i走到下乙個加油站 i 1 花費的油量是cost i 你從乙個加油站出發,剛開始 的時候油箱裡面沒有汽油。求從哪個加油站出發可以在環形路上走一圈。返回加油站的下標,如果沒有答案的話返回...

leetcode Python實現 70 爬樓梯

描述 假設你正在爬樓梯。需要 n 步你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 步 1 步 2.2 步 示例2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。...