leetcode : Combinations

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],
]

 

题目的意思是求C(n,k)的所有情况。分治算法可以处理,以函数c(n,k)表示从1-n中取k个数的所有情况,把问题分成两类,即包含了n的情况跟不包含n的情况,于是问题变成求c(n-1,k) c(n-1,k-1),注意k=0时要返回一个空的情况。
AC代码:
class Solution {
public:
    vector<vector<int> > combine(int n, int k) {
        return c(n,k);
    }
    vector<vector<int>> c(int n, int k){
        vector<vector<int>> ret;
        if(k == 0){
            vector<int> temp;
            ret.push_back(temp);
            return ret;
        }else if(n == k){
            vector<int> temp;
            for(int i = 0;  i < n; ++i)
                temp.push_back(i + 1);
            ret.push_back(temp);
            return ret;
        }else{
            ret = c(n - 1,k);
            auto temp = c(n - 1,k - 1);
            for(auto &w : temp){
                w.push_back(n);
                ret.push_back(w);
            }
            return ret;
        }
    }
};

 

posted on 2014-11-27 11:23  远近闻名的学渣  阅读(107)  评论(0)    收藏  举报

导航