一,问题描述
二,问题分析
与排列问题类似,但是排列问题考虑的是数组间元素的顺序,而组合问题考虑的是数组中不同的数字
三,问题解答
class Solution {
private:
vector<vector<int>> res; //用来保存所有的组合
void dfs(int n,int k,int index,vector<int> &c){
//递归结束条件
if(c.size() == k){
res.push_back(c);
return;
}
//递归的主体部分
for(int i = index;i<=n;i++){
c.push_back(i);
dfs(n,k,i+1,c); //i之间的数都已经被考虑过了
c.pop_back();
}
return;
}
public:
vector<vector<int>> combine(int n, int k) {
res.clear();
if(n<0 || k<0||k>n) return res;
vector<int> c;
dfs(n,k,1,c);
return res;
}
};