これは剪定の記録です。
i<=n-k+1
たとえば、n = 13、k = 4
- 数値を選択した後、最大iは11です。オプション[11,12,13]
- 2つの数値を選択した後の最大iは12です。オプション[12,13]
- 3つの数値を選択した後、最大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();
}
}
};