Notes
← All notes
·frontend·12 min

LeetCode Cycle 08:Backtracking 三部曲、剪枝、與 path 狀態維護

回溯法在面試裡是 senior 篩子——junior 看到 Subsets / Permutations 直接寫成兩三層 nested loop,senior 要能寫出參數 / 終止條件 / 單層處理三部曲,還要解釋 startIndex 跟剪枝為什麼必要。內部使用。

#leetcode#algorithm#backtracking#dfs#pruning#n-queens#interview-prep#面試系列#private

Cycle 08 接在 Cycle 07 後面是有道理的——backtracking 本質就是「遞迴 + 顯式狀態維護 + 剪枝」。Cycle 07 講的是純遞迴怎麼想,Cycle 08 把遞迴變成「樹形搜索」——每個遞迴呼叫對應樹上一個節點,每次 for 迴圈展開的選項對應同一層的兄弟。

定義上,backtracking 是「逐步建構候選解,一旦發現當前部分解不可能完成成合法解就回頭(backtrack),跳過整個子樹」[^1]。「不可能完成就回頭」就是 剪枝——這是它跟暴力枚舉的差距,也是面試官特別愛追問的點。

三部曲:寫每一道 backtracking 題的固定流程

Notion 筆記抄自「代码随想录」的三部曲,是這類題的通用框架:

  1. 遞迴函式參數:要傳什麼進去才能在每一層繼續建構候選解
  2. 終止條件:什麼狀況下這一條路走到底了,把當前 path 收進結果
  3. 單層處理:在這一層要嘗試哪些選項、每個選項做什麼、做完怎麼回溯