class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int> > ans;
vector<int> tmp;
helper(n, k, 1, tmp, ans);
return ans;
}
/*
n : 取值范围
k : 取值的个数
start : 开始的位置 使用这个参数是为了保证有序的增长
tmp : 临时存储容器
ans : 返回结果
*/
void helper(int n, int k, int start, vector<int> &tmp, vector<vector<int> >& ans) {
// DFS框架 首先终止条件判断, 通常在这里会发生结果的记录 记录完成就返回上一层
if (k == 0) {
ans.push_back(tmp); //记录结果
return; //返回到上一层
}
// 更改起始位置 这个for循环至关重要
for (int i = start; i < n+1; i++) {
tmp.push_back(i); // 相当于吃药 进入梦境
helper(n, k-1, i+1, tmp, ans); // 进入梦境
tmp.pop_back(); // 相当于吃解药 退回到以前的状态
}
}
};
leetcode77 数字组合
最新推荐文章于 2022-07-11 11:35:13 发布