iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
0
自我挑戰組

Leetcode新手挑戰30天系列 第 7

#66 Plus One - 繼續解

  • 分享至 

  • xImage
  •  

前情提要

昨天寫完code之後跑,發現如果測試個案是[9,9],輸出會有問題,變成[0,1]
12點前沒想到為什麼,所以今天繼續這題,找出程式碼錯誤的原因

進入正題

昨天完成的程式碼如下

def plusOne(self, digits: List[int]) -> List[int]:
    digits[len(digits)-1] = digits[len(digits)-1] + 1
    i = 1
    while digits[len(digits)-i] > 9:
        if i > len(digits):
            digits.insert(0, 1)
        digits[len(digits)-i] = digits[len(digits)-i] - 10
        digits[len(digits)-(i+1)] = digits[len(digits)-(i+1)] + 1
        i = i + 1
    return digits

查了python3的語法list.insert要新增一個元素在index[0]的用法是正確的,
所以就加了print來除錯,意外的print在leetcode也可以跑的(原本以為不行)
就找到要進位的這個地方有問題,修改成下面這樣:

def plusOne(self, digits: List[int]) -> List[int]:
    digits[len(digits)-1] = digits[len(digits)-1] + 1
    i = 1
    while digits[len(digits)-i] > 9:
        digits[len(digits)-i] = digits[len(digits)-i] - 10
        i = i + 1
        if i > len(digits):
            digits.insert(0, 1)
            break
        else:
            digits[len(digits)-i] = digits[len(digits)-i] + 1
    return digits

加上print來查程式碼運行的紀錄,發現第一版的程式在判斷的順序上有問題,
做[9,9]測試個案的時候,跑到i=2,第二行進位會變成digits[-1]=digits[len(digits)-1]=最尾位數
進位新增的地方也會跑不到
因此修改成第二種程式寫法之後,做輸入[9,9]的測試,輸出就會變成是[1,0,0]了
附上Submit後的結果:
https://ithelp.ithome.com.tw/upload/images/20190908/20113393ymj0mBIGTb.png


上一篇
#66 Plus One
下一篇
#136 Single Number
系列文
Leetcode新手挑戰30天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言