77.组合
题目链接:https://leetcode.cn/problems/combinations/
let result = [] //二维数组用来存储最终结果
let path = [] //一维数组:用来存储单个集合
var combine = function(n, k) {
result = []
backtracking(n, k, 1)
return result
};
// startIndex:每次递归时,将要搜索的起始位置传进来
const backtracking = (n, k, startIndex) => {
// 确定终止条件
if (path.length === k) {
result.push([...path])
return
}
// 确定单层递归逻辑
for (let i = startIndex; i <= n ; ++i) {
path.push(i)
backtracking(n, k, i + 1)
path.pop()
}
}
解题思路:
1.首先明白组合无序。
2.通过回溯三部曲一层一层进行遍历,取到想要的值即可。
回溯的知识点精简:
1.回溯算法也叫回溯搜索法,是一种搜索方式。回溯是递归的副产品,只要有递归就会有回溯。回溯函数就是递归函数。
2.回溯的本质就是穷举
3.回溯解决的问题都可以抽象为树形结构。
4.回溯三部曲
4.1回溯函数的返回值以及参数,返回值为空
4.2回溯函数的终止条件
4.3回溯搜索的遍历过程
具体的模板请看卡哥代码随想录的详细总结,这里就不列举了。
附上卡哥的详细讲解链接:https://programmercarl.com/回溯算法理论基础.html