思路
- 递归函数的返回值以及参数
- 回溯函数终止条件
- 单层搜索的过程
var combine = function (nums) {
const res = []
const path = []
function bfs(start) {
//终止条件
if (终止条件) {
res.push([...path])
return
}
//单层的比遍历
for (var i = start; i < nums.length; i++) {
path.push(i) // 处理节点
bfs(i + 1) // 递归处理
path.pop() // 回溯,撤销处理的节点
}
}
bfs(1)
return res
}
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}