[LeetCode] Combinations

来源:互联网 发布:游戏开发和java工资 编辑:程序博客网 时间:2024/05/19 22:02

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],]问题描述:给定两个整数n和k,返回1~n中的k个整数的所有集合。这直接用到了前面http://blog.csdn.net/luofengmacheng/article/details/14229951中的selectn()函数。
class Solution {public:    vector<vector<int> > selectn(vector<int> s, int n)      {          if(s.size() <= n)              return vector<vector<int> >(1, s);            if(n == 0)              return vector<vector<int> >();            if(n == 1) {              vector<vector<int> > vec;              vector<int> ivec;              for(vector<int>::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<vector<int> > vec1 = selectn(s, n - 1);          vector<vector<int> > vec2 = selectn(s, n);          for(vector<vector<int> >::iterator iter = vec1.begin();                                             iter != vec1.end(); ++iter) {              (*iter).insert((*iter).begin(), first_elem);              vec2.push_back(*iter);          }            return vec2;      }    vector<vector<int> > 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<int> s;        int i = 1;        for(i = 1; i <= n; ++i) {            s.push_back(i);        }                return selectn(s, k);    }};


原创粉丝点击