class Solution {
public:
vector<vector<int>> all;
vector<vector<int>> combine(int n, int k) {
if(n==0||k==0) return all;
vector<int> num;
for(int i=1;i<=n;i++)
num.push_back(i);
vector<int> one;
com(num,k,one);
return all;
}
void com(vector<int> & num,int k,vector<int> & one){
if(k==0)
{
all.push_back(one);
return;
}
int id=0;
while(id<num.size())
{
one.push_back(num[id]);
vector<int> tmp(num.begin()+id+1,num.end());
com(tmp,k-1,one);
one.pop_back();
id++;
}
return;
}
};
合并函数需要三个参数,原始数组num,个数k,还有递归存临时结果得one,从0开始遍历数组num,把第一个位置数放入临时结果one,然后递归,下一轮要找的数是从刚才放入one的数之后开始找,组合个数变为k-1,递归回来再把id位置的数弹出来,id++,往后继续组合。递归终止条件是,当k=0时,one中结果放入最终结果all。