给定一个n和k,给出c_{n}^k的所有组合。
例:给定n=4,k=2,输出,
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
一下是C++实现。
class Solution {
public:
vector<vector<int> > combine(int n, int k) {
vector<vector<int> > rvl;
if(n <= 0 || k <= 0) return rvl;
if(n == k) {
vector<int> vec;
for(int i = 0; i < n; i++){
vec.push_back(i+1);
}
rvl.push_back(vec);
return rvl;
}
if(k == 1){
for(int i = 0; i < n; i++){
vector<int> vec;
vec.push_back(i + 1);
rvl.push_back(vec);
}
return rvl;
}
//include n
vector<vector<int> > vec1 = combine(n - 1, k - 1);
for(int i = 0; i < vec1.size(); i++){
vec1[i].push_back(n);
}
if(vec1.size() > 0) rvl.insert(rvl.end(), vec1.begin(), vec1.end());
//not include n
vector<vector<int> > vec2 = combine(n - 1, k);
if(vec2.size() > 0) rvl.insert(rvl.end(), vec2.begin(), vec2.end());
return rvl;
}
};

本文介绍了一个C++实现的算法,该算法能够根据给定的整数n和k,计算并输出所有可能的C_n^k组合。通过递归的方式,算法有效地解决了组合问题,并提供了清晰的代码示例。
297

被折叠的 条评论
为什么被折叠?



