返回首页

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. 规则配置搜索

策略参数空间组合尝试。