回溯¶
Introduction¶
Backtracking is a general algorithmic technique for solving problems recursively by trying to build a solution incrementally, removing solutions that fail to satisfy the constraints at any point (i.e., backtracking). It is especially useful for combinatorial problems, such as permutations, combinations, and subsets.
Typical Applications¶
- Permutations and combinations
- Subsets and powersets
- N-Queens problem
- Sudoku solver
- Word search
- Graph coloring
- Path finding in mazes
- Partitioning problems
Classic Problems¶
- 39. Combination Sum
- 46. Permutations
- 78. Subsets
- 77. Combinations
- 90. Subsets II
- 40. Combination Sum II
- 47. Permutations II
- 51. N-Queens
- 79. Word Search
- 37. Sudoku Solver
Backtracking Solution Template¶
Key Points & Pitfalls¶
- Always backtrack (undo the last choice) after recursive call
- Prune branches early if constraints are violated (improves efficiency)
- Use visited/used arrays for permutation problems
- For combinations/subsets, use start index to avoid duplicates
- Be careful with reference types (slice, map) in Go; copy when needed
References¶
回溯模板
死磕三道经典题,它们代表了所有回溯问题: 组合 (Combination): LeetCode 77. Combinations 排列 (Permutation): LeetCode 46. Permutations 子集 (Subset): LeetCode 78. Subsets 理解这三者在“做选择”和“撤销选择”上的细微差别,你就掌握了回溯 80%的精髓
汉诺塔、N 皇后、图着色、旅行商问题