For example,
If n = 4 and k = 2, a solution is:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
问题描述:给定两个整数n和k,返回1~n中的k个整数的所有集合。
这直接用到了前面http://blog.csdn.net/luofengmacheng/article/details/14229951中的selectn()函数。
class Solution {
public:
vector > selectn(vector s, int n)
{
if(s.size() <= n)
return vector >(1, s);
if(n == 0)
return vector >();
if(n == 1) {
vector > vec;
vector ivec;
for(vector::iterator iter = s.begin();
iter != s.end(); ++iter) {
ivec.push_back(*iter);
vec.push_back(ivec);
ivec.clear();
}
return vec;
}
int first_elem = s.front();
s.erase(s.begin());
vector
> vec1 = selectn(s, n - 1);
vector > vec2 = selectn(s, n);
for(vector >::iterator iter = vec1.begin();
iter != vec1.end(); ++iter) {
(*iter).insert((*iter).begin(), first_elem);
vec2.push_back(*iter);
}
return vec2;
}
vector > combine(int n, int k) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector s;
int i = 1;
for(i = 1; i <= n; ++i) {
s.push_back(i);
}
return selectn(s, k);
}
};