2. Add Two Numbers

Question: Add Two Numbers

Solution

先備知識:

想法:

  1. 兩個 ListNode,都從第一個 ListNode 開始相加: total = l1.val + l2.val
  2. 相加起來的值,要存在一個新的 ListNode: dummy = ListNode()
  3. 但有個限制是,ListNode 的值不能超過十位數,如果超過要給下一個 ListNode
    1. 存在現在的 ListNode 的值會是 total % 10: ListNode(total % 10)
    2. 帶給下一個 ListNode 的值會是 total // 10: carrier = total // 10
  4. 一直讀 l1 跟 l2,直到讀完: while l1 or l2:
    1. 但如果讀到底, l1.val = 9, l2.val = 9,carrier 會是 1,所以 carrier 有值的話,也要幫他新增一個 ListNode,因此 while 迴圈也要把 carrier 考慮進去: while l1 or l2 or carrier:
    2. 讀完 l1.val, l2.val, 做完現在的 node,記得都要往下推一個 Node
      1. l1 = l1.next
      2. l2 = l2.next
      3. curr = curr.next
  5. 邊際值處理:
    1. l1 如果是 None,取值的時候 l1.val 會噴錯,因為 None Type 沒有 val 這個 attribute,所以可以先設定好變數,處理當 l1 為 None 時的情況: val1 = l1.val if l1 else 0
    2. l2 同理
    3. 如果 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 = next
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode()
curr = dummy
carrier = 0
while l1 or l2 or carrier:
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
total = val1 + val2 + carrier
carrier = total // 10
curr.next = ListNode(total % 10)

curr = curr.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return dummy.next

Video Solution



Comments

Popular Posts