给定两个整数 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(); // 回溯,撤销选择,尝试下一个数字}}
};
一开始很不理解这类题,做多两道题后也能拿捏了