leetcode 解題 2.兩數相加-python3 題解

娃哈哈店長發表於2019-12-26
  • 給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
  • 如果,我們將這兩個數相liang加起來,則會返回一個新的連結串列來表示它們的和。
  • 您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

仿leetcode官方類ListNode定義

解決除錯程式碼報錯:

name 'ListNode' is not defined//ListNode' object has no attribute 'val'.

原因:估計leetcode上面平臺除錯程式碼的時候啟用了自己的一些庫檔案。 在本地ied除錯的時候要加上ListNode的類定義(模仿官方的功能寫的)。

類的程式碼新增:

class ListNode():
    def __init__(self, val):
        if isinstance(val,int):
            self.val = val
            self.next = None

        elif isinstance(val,list):
            self.val = val[0]
            self.next = None
            cur = self
            for i in val[1:]:
                cur.next = ListNode(i)
                cur = cur.next

    def gatherAttrs(self):
        return ", ".join("{}: {}".format(k, getattr(self, k)) for k in self.__dict__.keys())

    def __str__(self):
            return self.__class__.__name__+" {"+"{}".format(self.gatherAttrs())+"}"

不過就算我們定義了這個類,在本地除錯的過程中,我們傳參的形式還是list。但是在leetcode提交程式碼並不是,而是應該官方透過介面將我們傳入的[1,2,3]list形式引數轉化成了ListNode了。
所以我們還要在本地測試之前新增判斷引數形式的程式碼

if isinstance(l1,list):
            l1 = ListNode(l1)
            l2 = ListNode(l2)

我們來看看vscode除錯列印的效果:

if __name__ == "__main__":
    test = Solution()
    print(test.addTwoNumbers([1,3],[2,1,3]))

除錯結果:(和官方定義得那個輸出是一樣的)

 f:/Leetcode/2.兩數相加.py
ListNode {val: 3, next: ListNode {val: 4, next: ListNode {val: 3, next: None}}}

原始碼儲存在github上,歡迎來提bug哦!-點選訪問
如果覺得不錯請給我一個star謝謝了Stray_Camel(^U^)ノ~YO

本作品採用《CC 協議》,轉載必須註明作者和本文連結
文章!!首發於我的部落格Stray_Camel(^U^)ノ~YO

相關文章