Combinations

来源:互联网 发布:专业软件开发学院 编辑:程序博客网 时间:2024/04/30 10:12

Combinations

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-n中选k个,所有组合的可能。

分析:一看就是dfs的题目,可惜还是不熟悉,调了很久。从1...n开始取,满了k个,就push到结果结合中,然后再后移一位,继续取。

代码:

class Solution {public:    vector<vector<int> > combine(int n, int k) {        vector<vector<int> > res;        if(n<k) return res;        vector<int> one;        dfs(res,one,k,n,0);        return res;    }    void dfs(vector<vector<int> > &res,vector<int> &one, int k, int n, int index){        if(one.size()==k){//这里的判断条件不能用index==k 因为index决定了下一个push进one的元素,会出现重复            res.push_back(one);            return;        }        for(int i=index;i<n;i++){            one.push_back(i+1);            dfs(res,one,k,n,i+1);//i+1 保证下一个push的值比前一个 大 one里边是升序排列(2,3)(2,4)            one.pop_back();        }    }    };


0 0
原创粉丝点击