给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
class Solution {
private:
vector<vector<int>> res;
// 求解C(n,k),当前已经找到的元素储存在c中
void generateCombinations(int n, int k, int start, vector<int> &c){
if(c.size()==k){
res.push_back(c);
return;
}
for(int i=start;i<=n;i++){
c.push_back(i);
generateCombinations(n,k,i+1,c);
c.pop_back(); // 回溯
}
}
public:
vector<vector<int>> combine(int n, int k) {
res.clear();
if(n<=0 || k<=0 || k>n)
return res;
vector<int> c;
generateCombinations(n,k,1,c);
return res;
}
};