77. 组合(Leetcode刷题 dfs深度优先搜索)
题目
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
输入:n = 1, k = 1
输出:[[1]]
解题代码
class Solution{
public:
//Res作为承载结果的二维容器
vector<vector<int>> Res;
//res作为承载每个小数组的容器
vector<int> res;
//dfs的代码模板如下
void dfs(int n ,int k,int begin){
//条件判断
if(res.size()==k){
//小数组压入大数组的栈中
Res.push_back(res);
return;
}
//开始循环深度搜索
for(int i =begin;i<=n;i++){
res.push_back(i);
//dfs的核心,递归,注意i+1
dfs(n,k,i+1);
//小数组中弹出一个值
res.pop_back();
}
}
//相当于main
vector<vector<int>> combine(int n,int k){
dfs(n,k,1);
return Res;
}
};
代码效率
执行用时:20 ms, 在所有 C++ 提交中击败了67.70%的用户
内存消耗:9.9 MB, 在所有 C++ 提交中击败了25.14%的用户