一、题目
二、代码
class Solution
{
public:
//回溯的灵魂在于 处理 --进入深一层-- 撤销
vector<vector<int>> return_vecotr; //定义为全局变量 减少参数传递数量 不错
vector<int> path;
void backtrack(int n,int k,int start_point)
{
if(path.size()==k) //终止条件
{
return_vecotr.push_back(path);
return;
}
for(int i=start_point;i<=n-(k-path.size())+1;i++) //还需要多少个元素? 一共需要 k 已经有path.size() 还需要 k-path.size() 所以选择节点n-(k-path.size())+1
{
path.push_back(i); //处理
backtrack(n,k,i+1); //进入深一层
path.pop_back(); //撤销
}
}
vector<vector<int>> combine(int n, int k)
{
return_vecotr.clear();
path.clear();
backtrack(n,k,1);
return return_vecotr;
}
};