返回首页

回溯:组合与子集标准模板

一、面试常考点

1. 组合与排列区别

组合看集合不看顺序;排列看顺序。

2. 去重常见写法

排序后同层去重:i > start && nums[i] === nums[i-1]

二、细节介绍

1. 组合

递归传 start 防止重复选前面元素。

2. 子集

每到一层先收集当前路径。

三、示例代码(组合)

function combine(n, k) {
  const res = []
  const path = []

  function dfs(start) {
    if (path.length === k) {
      res.push([...path])
      return
    }

    for (let i = start; i <= n; i++) {
      path.push(i)
      dfs(i + 1)
      path.pop()
    }
  }

  dfs(1)
  return res
}

四、常用应用场景

1. 策略组合生成

参数组合枚举。

2. 测试用例覆盖

输入组合自动生成。