Merge Two Binary Trees

題目

做法一:recursive - DFS

  1. 找出最小的可重複動作:merge 兩個 nodes

    • 題目給的 method 就可以用來做遞迴
  2. 假設 mergeTrees 已完成,實作此最小可重複動作

    1
    2
    3
    4
    root1.val += root2.val
    root1.left = self.mergeTrees(root1.left, root2.left)
    root1.right = self.mergeTrees(root1.right, root2.right)
    return root1

Balanced Binary Tree

題目

做法一

思路:

  1. 依照 height-balanced 的定義,需要符合每個node 的左右子樹高度差都不大於 1
  2. 假設有個 function height 可以回傳 node 的 height
    • 先不實作內容
  3. 使用這個 height 完成 isBalanced

Same Tree

題目
思路:

  1. 先用以樹來說較直觀的遞迴解
  1. 要比較所有相同位置的 node 的值是否一樣,可以把所有待比較的 node pair 丟到 stack 裡一一拿出來比較,全部比完都通過的話就是一樣的 tree
  2. 一個 pair 比較後會把下面的所有分支點繼續丟進 stack 等待比較,所以用 while stack: 只要有就繼續比,一直比到完
    • 此為廣先搜尋 (Breadth-First Search)

Merge Two Sorted Lists

題目
思路:

  1. 因為要做一個 linked list,可以用 while 在每次迴圈都接一個 node 出來

  2. 先設 while True:,等寫迴圈內容時再來確定 while 可繼續執行的條件

  3. 寫第一 part (如下) 後發現,while 條件需要 l1 and l2

    1
    2
    3
    4
    5
    6
    if l1.val > l2.val:
    curr.next = l2
    l2 = l2.next
    else:
    curr.next = l1
    l1 = l1.next

Remove Duplicates from Sorted List

題目
思路:

  1. 既然是 Linked List,我們可以宣告一個指標 curr 指向第一個 node,用 while 迴圈一次檢查一個 node (檢查完將指標移到下一個 node)

    • 不能直接用 head 來移動,因為到時候回傳答案的時候需要回傳這個 head
  2. 設定 while 可以繼續檢查的條件:有時要先寫 while 的內容,才會比較確定 while 條件應該怎麼寫,這時可以先寫 while True:,等內容寫完再來改條件

Add Two Numbers

題目
思路:

  1. 既然 Linked List 是由個位數開始,剛好可以用小學學的加法來從個位數開始相加。所以須設計一個迴圈來執行可重複執行的加法動作,一步步構建答案所需的 linked list,一次建立一個 node,直到完成。
  2. 迴圈要可重複執行,需要有個指標,在迴圈內對該指標所指的 node 做操作,並在迴圈結束時讓指標指到下一個 node,讓下一次迴圈來操作

Search Insert Position

題目
思路:最直覺是直接 iterate nums,不過題目指定要 O(log n),所以用 binary search 才能達到

  1. 設定左右兩個指標作為可能答案範圍:[left, right],目標是移動這兩個指標,縮小答案範圍,直到我們找到答案或答案範圍縮到只剩 1 個為止

  2. while left < right: binary search 什麼時候需要繼續下去?只要符合這個條件,就繼續 binary search

    • 因為目標是把答案範圍縮小到一個,此時兩個指標必須重合

3Sum

題目
思路:

  • 用三個指標,iterate 最左邊那個,找出對應於每個 left 指標的所有 result
  • 先把 nums 排序,如此移動 mid, right 指標時就有個依據

Python3 solution

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×