leetcode-77 Combinations

来源:互联网 发布:淘宝口令在线生成器 编辑:程序博客网 时间:2024/06/06 12:50

这题是组合问题,与排列问题(permutation)有些不一样,不过大体思路是一样的,dfs里面套着一个循环

<span style="font-family:Microsoft YaHei;font-size:14px;">class Solution {public:    vector<vector<int> > combine(int n, int k) {        vector<vector<int> > res;        vector<int> tmpres;        if(k <=0 || n <= 0 || k > n) return res;        dfs(res,tmpres,1,n,0,k);        return res;    }    void dfs(vector<vector<int> > &res,vector<int> &tmpres,int index,int n,int num,int k){        if(num == k){            res.push_back(tmpres);            return;        }        for(int i = index; i <= n; i++){            tmpres.push_back(i);            dfs(res,tmpres,i+1,n,num+1,k);            tmpres.pop_back();        }    }};</span>


参考:http://blog.csdn.net/linhuanmars/article/details/21260217

这个博主的博客上的有leetcode的几乎所有解答,比较有参考价值(不过是用java写的)

原题链接: http://oj.leetcode.com/problems/combinations/ 
这道题是NP问题的题目,时间复杂度没办法提高,用到的还是N-Queens中的方法:用一个循环递归处理子问题。实现的代码跟Combination Sum非常类似而且更加简练,因为不用考虑重复元素的情况,而且元素只要到了k个就可以返回一个结果

NP问题在LeetCode中出现的频率很高,例如N-QueensSudoku SolverCombination SumPermutations等等。不过这类题目都是用一种方法而且也没有办法有时间上的提高,所以还是比较好掌握的。

0 0