组合(DFS)
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
示例 2:
输入:n = 1, k = 1 输出:[[1]]
提示:
1 <= n <= 20
1 <= k <= n
class Solution {
vector<vector<int>> v;
vector<int> path;
public:
vector<vector<int>> combine(int n, int k) {
dfs(n, 1, k);
return v;
}
void dfs(int n, int i, int k){
if(path.size() == k) // 如果当前组合的大小为 k,保存当前组合
v.push_back(path);
for(; i <= n; i++){
path.push_back(i);
dfs(n, i+1, k); // 递归选择下一个数字
path.pop_back(); // 回溯,撤销选择,尝试下一个数字
}
}
};
一开始很不理解这类题,做多两道题后也能拿捏了