给定两个整数?n
?和?k
,返回范围?[1, n]
?中所有可能的?k
?个数的组合。
你可以按?任何顺序?返回答案
combine
函数初始化结果变量和当前组合变量,然后调用backtrack
函数来生成所有组合。backtrack
函数通过添加当前元素到组合中,然后递归地调用自身来添加下一个元素,来生成组合。当组合的大小达到 k 时,它会被添加到结果列表中。在回溯过程中,最近添加的元素会被移除,以便于尝试下一个可能的元素。
/*
* @lc app=leetcode.cn id=77 lang=cpp
*
* [77] 组合
*/
// @lc code=start
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>> result;
vector<int> combination;
backtrack(result, combination, 1, n, k);
return result;
}
void backtrack(vector<vector<int>>& result, vector<int>& combination, int start, int n, int k) {
if (combination.size() == k) {
result.push_back(combination);
return;
}
for (int i = start; i <= n; ++i) {
combination.push_back(i);
backtrack(result, combination, i + 1, n, k);
combination.pop_back();
}
}
};
// @lc code=end