问题描述
思路
老方法,,看见枚举就用递归
代码
class Solution {
private:
vector <vector <int>> res;
void dfs(int n,int k,int start,vector <int> &p)
{
if(p.size()==k) {//套路1,先写什么时候将结果放入res
res.push_back(p);
}
for(int i=start;i<=n;i++) {//套路2,树形图有几个分支,就调用几次递归函数
p.push_back(i);//套路3将每次分支的结果放入临时变量p中
dfs(n,k,i+1,p);
p.pop_back();//回溯,需要进行的操作
}
}
public:
vector<vector<int>> combine(int n, int k) {
if(n<=0||n<k||k<=0) return res;
vector <int> p;
dfs(n,k,1,p);
return res;
}
};
画出树状图,注意参数的传递,,写多了就会有老套路