77.组合
有几个重点
1.递归的终止条件,当v1的大小和k个数的组合k相同时,递归结束,将v1插入result中
2.start的利用,start是为了防止重复的情况出现,
以1,2,3,4中取两个元素为例
第一次递归时start=1,i从1循环到4,
1.i=1;for循环中的digui(i+1),就到了2,之后递归中在继续递归3,4,
返回[1,2]、1,3,1,4
2.i=2,因为从start开始的,start=i+1=3,避免了重新从1开始的情况。
class Solution {
public:
vector<int>v1;
vector<vector<int>>result;
void digui(int n,int t,int start)
{
if(v1.size()==t)
{
result.push_back(v1);
return;
}
for(int i=start;i<=n;i++)
{ v1.push_back(i);
digui(n,t,i+1);
v1.pop_back();
}
}
vector<vector<int>> combine(int n, int k) {
digui(n,k,1);
return result;
}
};