先看题目描述。
典型的DFS题,如果你做过46和47(全排列和全排列 II),这题对你来说难度不大,没做过的话,可以做完这题再去做那两题,加深对DFS的理解。
代码如下。
class Solution {
private:
//存储结果
vector<vector<int>> res;
//存储当前组合
vector<int> temp;
int n;
//index为目前走到的位置,remain是目前组合还差多少数字
void helper(int index, int remain){
//如果不差数字了,temp就是一个组合
if(remain == 0){
res.push_back(temp);
return;
}
//如果index及后面的数字的数量,小于目前组合需要的数字量,说明可以抛弃了
if(n-index+1 < remain){
return;
}
for(int i = index;i <= n;++i){
temp.push_back(i);
helper(i+1,remain-1);
temp.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
this->n = n;
helper(1,k);
return res;
}
};