回溯法挨个选:
class Solution {
public:
vector<vector<int>> res;
vector<int> tmp;//辅助数组
int n;
//idx代表当前选的数,cnt代表当前选了几个
void backtrack(vector<int> &tmp, int idx, int cnt, int k){
if(cnt == k){
res.push_back(tmp);
return;
}
for(int i = idx+1; i <= n; ++i){
tmp[cnt] = i;
backtrack(tmp, i, cnt+1, k);
tmp[cnt] = 0;
}
}
vector<vector<int>> combine(int n, int k) {
this->n = n;
tmp = vector<int>(k, 0);//一共需要选k个
backtrack(tmp, 0, 0, k);
return res;
}
};