DFS 回溯:排列、组合、子集
一、面试常考点
1. 回溯和普通 DFS 区别
回溯强调“做选择 -> 递归 -> 撤销选择”。
2. 剪枝思路
提前终止不可能成为答案的分支。
二、细节介绍
1. 路径与选择列表
path 存当前解,递归参数控制可选范围。
2. 去重策略
排序 + 同层去重是高频做法。
三、示例代码
function subsets(nums) {
const res = []
const path = []
function dfs(start) {
res.push([...path])
for (let i = start; i < nums.length; i++) {
path.push(nums[i])
dfs(i + 1)
path.pop()
}
}
dfs(0)
return res
}
四、常用应用场景
1. 权限组合枚举
角色-权限组合探索。
2. 规则配置搜索
策略参数空间组合尝试。