2. Add Two Numbers
Question: Add Two Numbers
Solution
先備知識:
想法:
- 兩個 ListNode,都從第一個 ListNode 開始相加: total = l1.val + l2.val
- 相加起來的值,要存在一個新的 ListNode: dummy = ListNode()
- 但有個限制是,ListNode 的值不能超過十位數,如果超過要給下一個 ListNode
- 存在現在的 ListNode 的值會是 total % 10: ListNode(total % 10)
- 帶給下一個 ListNode 的值會是 total // 10: carrier = total // 10
- 一直讀 l1 跟 l2,直到讀完: while l1 or l2:
- 但如果讀到底, l1.val = 9, l2.val = 9,carrier 會是 1,所以 carrier 有值的話,也要幫他新增一個 ListNode,因此 while 迴圈也要把 carrier 考慮進去: while l1 or l2 or carrier:
- 讀完 l1.val, l2.val, 做完現在的 node,記得都要往下推一個 Node
- l1 = l1.next
- l2 = l2.next
- curr = curr.next
- 邊際值處理:
- l1 如果是 None,取值的時候 l1.val 會噴錯,因為 None Type 沒有 val 這個 attribute,所以可以先設定好變數,處理當 l1 為 None 時的情況: val1 = l1.val if l1 else 0
- l2 同理
- 如果 l1 本人是 None,在進入迴圈前的 l1 = l1.next 會噴錯,因為 NoneType 沒有 next 這個 attribute,因此 l1 為 None 時就讓他繼續是 None: l1 = l1.next if l1 else None
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:dummy = ListNode()curr = dummycarrier = 0while l1 or l2 or carrier:val1 = l1.val if l1 else 0val2 = l2.val if l2 else 0total = val1 + val2 + carriercarrier = total // 10curr.next = ListNode(total % 10)curr = curr.nextl1 = l1.next if l1 else Nonel2 = l2.next if l2 else Nonereturn dummy.next
Comments
Post a Comment