Combinations

来源:互联网 发布:js字符串替换换行符 编辑:程序博客网 时间:2024/05/16 17:18

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;}



0 0