组给出两个整数n和k,返回从1……n中选出的k个数的组合。
样例
例如 n = 4 且 k = 2
返回的解为:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]
#ifndef C152_H
#define C152_H
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
/**
* @param n: Given the range of numbers
* @param k: Given the numbers of combinations
* @return: All the combinations of k numbers out of 1..n
*/
vector<vector<int> > combine(int n, int k) {
// write your code here
vector<vector<int>> v;
vector<vector<int>> comval;
if (n <= 0 || k <= 0)
return v;
vector<int> val;
int r = 1;
while (r <= k)
{
v = comval;
comval.clear();
if (r == 1)
{
for (int i = 1; i <= n; ++i)
{
val.push_back(i);
v.push_back(val);
val.clear();
}
}
int len = v.size();
for (int i = 0; i < len - 1; ++i)
{
int size = v[0].size();
if (v[i][size - 1] < n)
{
for (int j = v[i][size - 1] + 1; j <= n; ++j)
{
v[i].push_back(j);
comval.push_back(v[i]);
v[i].pop_back();
}
}
}
++r;
}
return v;
}
};
#endif