这里有个剪枝记录下。
i<=n-k+1
比如n=13,k=4,
- 选了一个数之后,i最大是11,可选[11,12,13]
- 选了两个数之后,i最大为12,可选[12,13]
- 选了三个数之后,i最大为13,可选[13]
所以不用循环到n.
这里max(i)+再选几个数字=n+1
所以,max(i)=n-1-再选几个数字
我们用k代表再选几个数字。
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>>ans;
vector<int>tep;
dfs(n,k,ans,tep,1);
return ans;
}
void dfs(int n,int k,vector<vector<int>>& ans,vector<int> tep,int index){
if(k==0){
ans.push_back(tep);
return;
}
for(int i=index;i<=n-k+1;i++){
tep.push_back(i);
dfs(n,k-1,ans,tep,i+1);
tep.pop_back();
}
}
};