Aquí hay un registro de poda.
i<=n-k+1
Por ejemplo, n = 13, k = 4,
- Después de seleccionar un número, el máximo i es 11, opcional [11,12,13]
- Después de elegir dos números, el máximo i es 12, opcional [12,13]
- Después de elegir tres números, el máximo i es 13, opcional [13]
Por lo tanto, no hay necesidad de pasar a n.
Aquí max (i) + seleccionar algunos números más = n + 1
Entonces, max (i) = n-1-seleccionar algunos números más
Utilizamos k para seleccionar algunos números más.
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();
}
}
};