题目描述:
给定两个整数 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
题目链接:
解题主要思路:
很简单的一道dfs,确定要递归结速条件,是否需要剪枝,什么时候进行递归,如何回溯即可。
解题代码:
cpp
class Solution {
public:
vector<vector<int>> ret;
vector<int> path;
int n, k;
vector<vector<int>> combine(int _n, int _k) {
n = _n, k = _k;
dfs(1);
return ret;
}
void dfs(int pos)
{
// 结速条件
if (path.size() == k) {
ret.push_back(path);
return;
}
for (int i = pos; i <= n; ++i) {
path.push_back(i);
dfs(i+1); // 递归
path.pop_back(); // 回溯
}
}
};