回溯:组合与子集标准模板
一、面试常考点
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. 测试用例覆盖
输入组合自动生成。