Given two integers n and k, return all possible combinations ofk numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
<pre class="cpp" name="code">class Solution {
public:
vector<vector<int> > combine(int n, int k) {
vector<vector<int> > alls=combine(1,n,k);
return alls;
}
vector<vector<int>> combine(int start,int end,int k){
vector<vector<int>> alls;
if(k==0 || start > end) return alls;
for(int i=start;i<=end-k+1;++i){
vector<vector<int>> rest = combine(i+1,end,k-1);
if(rest.size()){
for(int j=0;j<rest.size();++j){
rest[j].insert(rest[j].begin(),i);
alls.push_back(rest[j]);
}
}else{
vector<int> v(1,i);
alls.push_back(v);
}
}
return alls;
}
};
class Solution {
public:
vector<vector<int> > combine(int n, int k) {
vector<int> src;
for(int i=1;i<=n;++i){
src.push_back(i);
}
return combine(src,k);
}
vector<vector<int>> combine(vector<int> &src,int k){
vector<vector<int>> alls;
if(k==0 || k>src.size() || src.size()==0) return alls;
for(int i=0;i<src.size()-k+1;++i){
vector<int> tmp(src.begin()+i+1,src.end());
vector<vector<int>> rest=combine(tmp,k-1);
if(rest.size()){
for(int j=0;j<rest.size();++j){
rest[j].insert(rest[j].begin(),src[i]);
alls.push_back(rest[j]);
}
}else{
vector<int> v;
v.push_back(src[i]);
alls.push_back(v);
}
}
return alls;
}
};