回溯算法
回溯算法套路
回溯算法本身就是一个决策树的遍历过程, 或者 说是一个**深度优先遍历(DFS)**的过程.
-
路径
-
选择列表
-
结束条件
const result = []
function dfs(路径, 选择列表) {
if (满足结束条件) {
result.add(路径)
return
}
for (选择 in 选择列表) {
做选择
dfs(路径, 选择列表)
撤销选择
}
}
小技巧
- 如果给的数组里有重复元素: 得用上 visited 辅助数组
- 解集不能包含重复的组合: 即 [1, 2] 和 [2, 1] 视为同一种情况, dfs 函数第一个参数传 begin
- 求子集: dfs 函数第一个参数传 begin, 并且递归时
dfs(i + 1, track)
相关题目
- 13. 机器人的运动范围
- 17. 电话号码的字母组合
- 22. 括号生成
- 39. 组合总数
- 40. 组合总数 II
- 46. 全排列
- 47. 全排列 II
- 60. 排列序列
- 77. 组合
- 78. 子集
- 79. 单词搜索
- 90. 子集 II
- 93. 复原-ip-地址
- 131. 分割回文串
- 216. 组合总数 III