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], ]
题目解析:
(1)A[n,k] = A[n-1,k]+ ( A[n-1,k-1] + A[n] )。所以一般的想法应该是递归进行求解。
(2)另外注意边界条件:n == k,k == 1,n < k 或者 k < 0 的情况下
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int> > combine(int n, int k) {
vector<vector<int>> combinationsk;
if(n<k || k <= 0)
return combinationsk;
if(n == k)
{
vector<int> temp;
for(int i=0;i<k;i++)
temp.push_back(i+1);
combinationsk.push_back(temp);
return combinationsk;
}
if(k == 1)
{
for(int i=1;i<=n;i++)
{
vector<int> temp;
temp.push_back(i);
combinationsk.push_back(temp);
}
return combinationsk;
}
combinationsk = combine(n-1, k);
vector<vector<int>> combinationskMinusOne = combine(n-1, k-1);
for(int i = 0;i<combinationskMinusOne.size();i++)
{
vector<int> temp = combinationskMinusOne.at(i);
temp.push_back(n);
combinationsk.push_back(temp);
}
return combinationsk;
}
void printCombinations(vector<vector<int> > combinations)
{
for(int i=0;i<combinations.size();i++)
{
vector<int> temp = combinations.at(i);
for(int j=0;j<temp.size();j++)
{
cout << temp.at(j) << " ";
}
cout << endl;
}
}
int main(void)
{
vector<vector<int> > combinations = combine(4, 3);
printCombinations(combinations);
system("pause");
return 0;
}