[LeetCode] Combinations

2014-11-24 01:41:34 · 作者: · 浏览: 1
Given two integers n and k, return all possible combinations of k 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 > selectn(vector s, int n)    
    {    
        if(s.size() <= n)    
            return vector >(1, s);    
    
        if(n == 0)    
            return vector >();    
    
        if(n == 1) {    
            vector > vec;    
            vector ivec;    
            for(vector::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
> vec1 = selectn(s, n - 1); vector > vec2 = selectn(s, n); for(vector >::iterator iter = vec1.begin(); iter != vec1.end(); ++iter) { (*iter).insert((*iter).begin(), first_elem); vec2.push_back(*iter); } return vec2; } vector > 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 s; int i = 1; for(i = 1; i <= n; ++i) { s.push_back(i); } return selectn(s, k); } };