8.combinations 组合

8.combinations 组合

链接:http://www.lintcode.com/zh-cn/problem/combinations/

描述:

组给出两个整数n和k,返回从1......n中选出的k个数的组合。

样例

例如 n = 4 且 k = 2

返回的解为:

[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]

分析:中等题,只是一个NP问题,通常用递归的方法去解答,类似N queens问题。主要思想就是一句话:有一个循环递归处理子问题,用一个判断使递归终止。对于本来说,递归终止的条件是当数组的大小等于指定的数组长度k,表示找到一组合法的数,放入保存的二维数组里面,返回。循环是n个数里面选择k个,从小到大选择。当有k个数之后,数组要不断删除数,才能放入新的数。

 

class Solution {
public:
    /**
     * @param n: Given the range of numbers
     * @param k: Given the numbers ofcombinations
     * @return: All the combinations of knumbers out of 1..n
     */
    vector >combine(int n, int k) {
        // write your code here
        vector> ret;
        if(n<0||n vec;
        helper(ret,vec,1,n,k);
        return ret;
    }
    void helper(vector>&ret,vector &vec,int beg,int n,int k)
    {
        if(vec.size()==k)
        {
            ret.push_back(vec);
            return ;
        }
            for(int i=beg;i<=n;++i)
            {
                vec.push_back(i);
                helper(ret,vec,i+1,n,k);
                vec.erase(vec.end()-1);
            }
    }
};


你可能感兴趣的:(LeetCode,lintcode,CC++,刷题)