leetcode-77-Combinations

来源:互联网 发布:淘宝淘客联盟 编辑:程序博客网 时间:2024/06/05 23:41

问题

题目:[leetcode-77]

思路

dfs搞定。
由于限定了层数,所以到k层的时候返回即可。
写代码的时候有一个bug,由于事先分配了空间,所有不能用pop_back().

对于全排列如果也指定k位,那么也需要用dfs的办法,之前的办法可能就不可行了。

代码

class Solution {public:    vector<vector<int>> combine(int n, int k) {        vector<int> nums;        vector< vector<int> > ret;        map<int, bool> vis;        dfs( 0, k, n, nums, vis, ret );        return ret;    }private:    void dfs( int depth, int k, int n, vector<int>& nums, map<int,bool>& vis, vector<vector<int>>& ret) {        if( depth == k ) ret.push_back( nums );        else {            for( int x = 1; x <= n; ++x ) {                if( vis.find(x) != vis.end() && vis[x] ) continue;                if( nums.size() && x <= nums[nums.size()-1] ) continue;                nums.push_back(x);                vis[x] = true;                dfs( depth+1, k, n, nums, vis, ret );                nums.pop_back();                vis[x] = false;            }        }    }};
原创粉丝点击