回溯算法
回溯算法主要使用dfs
void backtracking(参数) {
//判定终止
if (终止条件) {
存放结果;
return;
}
//枚举可选项
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
//(保存现场)
//选择一个路径
处理节点;
backtracking(路径,选择列表); // 递归
//恢复现场
回溯,撤销处理结果
}
}
题目 77.组合
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
思路
回溯算法模板题
代码
class Solution {
vector<vector<int>> ans;
public:
void dfs(int now,int k,int n,vector<int> temp)
{
if(k==0)
{
ans.push_back(temp);
return;
}
if(n-now+1<k) return;
for(int i=now;i<=n;i++)
{
temp.push_back(i);
dfs(i+1,k-1,n,temp);
temp.pop_back();
}
}
vector<vector<int>> combine(int n, int k) {
vector<int> temp;
dfs(1,k,n,temp);
return ans;
}
};