https://leetcode.com/problems/combinations/
题目描述见链接。这道题的意思是求n个数字中k个数字的组合。一看到这种类型的应该就知道是要用回溯的方法做了。 回溯的条件是找到k个数字或者目前要找的数字大于n。
回溯的变量就是当前要加入数组的数字,从1开始,一直计算到n。
代码:
class Solution {
private:
vector<vector<int> > res;
vector<int> subres;
public:
vector<vector<int>> combine(int n, int k) {
getRes(n,k,0,1);
return res;
}
void getRes(int n,int k,int num,int vnum){
if(num==k){
res.push_back(subres);
return;
}
for(int i=vnum;i<=n;i++){
subres.push_back(i);
getRes(n,k,num+1,i+1);
subres.pop_back();
}
}
};