↓快轉到主要內容

Backtracking

Backtracking 回溯
·3 分鐘
演算法 Backtracking Recursion Dfs Pruning
選擇、遞迴、撤銷的模板,子集合、排列、限制條件、網格搜尋與剪枝
LeetCode 212: Word Search II
·1 分鐘
LeetCode Hard Trie Backtracking Matrix
LeetCode 212 解題筆記:把所有單字建成 Trie,網格 DFS 時同步走 Trie,找到就移除、空節點就剪掉
LeetCode 301: Remove Invalid Parentheses
·2 分鐘
LeetCode Hard Backtracking Bfs String
LeetCode 301 解題筆記:先算出最少要刪幾個左右括號再回溯;或用 BFS 一層刪一個,第一個出現合法字串的層就是答案
LeetCode 996: Number of Squareful Arrays
·2 分鐘
LeetCode Hard Dynamic-Programming Bitmask Backtracking Math Hash-Table
LeetCode 996 解題筆記:n 最多 12,用 bitmask DP:dp[mask][last] = 用了 mask 這些數、最後一個是 last 的排列數;相同的數規定依 index 順序使用來去重
LeetCode 980: Unique Paths III
·1 分鐘
LeetCode Hard Backtracking Matrix Dfs
LeetCode 980 解題筆記:網格回溯,原地標記走過的格子,到終點時檢查是否走過所有空格
LeetCode 51: N-Queens
·1 分鐘
LeetCode Hard Backtracking
LeetCode 51 解題筆記:每列放一個皇后,用三個 set 記錄被佔用的欄和兩條對角線
LeetCode 3799: Word Squares II
·1 分鐘
LeetCode Medium Backtracking Enumeration String
LeetCode 3799 解題筆記:四層枚舉,每一層先用角落字母剪枝,排序後輸出自然就是字典序
LeetCode 22: Generate Parentheses
·1 分鐘
LeetCode Daily Medium String Backtracking Recursion Combinatorics Parentheses
使用回溯法生成所有有效的括號組合
LeetCode 2044: Count Number of Maximum Bitwise-OR Subsets
·2 分鐘
LeetCode Medium Backtracking Bit-Manipulation Enumeration
LeetCode 2044 解題筆記:最大 OR 就是全部 OR 起來;回溯時一旦達到最大值,剩下的直接算 2^k
LeetCode 988: Smallest String Starting From Leaf
·1 分鐘
LeetCode Medium String Backtracking Tree Depth-First-Search
LeetCode 988 解題筆記:DFS 時把字元加在字串前面,到葉子時就是「從葉子到根」的字串,取最小的
LeetCode 113: Path Sum II
·1 分鐘
LeetCode Medium Backtracking Tree Depth-First-Search Binary-Tree
LeetCode 113 解題筆記:回溯記錄目前的路徑,到葉子時總和等於目標就存一份複本;值可能是負的,不能提早剪枝
LeetCode 473: Matchsticks to Square
·1 分鐘
LeetCode Medium Array Dynamic-Programming Backtracking Bit-Manipulation
LeetCode 473 解題筆記:總和要能被 4 整除;由大到小把每根火柴放進四個邊之一,超過邊長或跟前一個邊長度相同就跳過