leetcode 22括号生成

//经过剪枝的全排列解算,
/****
1)左右括号都必须为n,即left<n,right<n;
2)必须先放置左括号才能放置右括号,即限制条件有left>right;
****/

 其中left,right分别为i,j

DFS+剪枝:

class Solution {
public:
    vector<string> generateParenthesis(int n){
        vector<string> res;
        if(n<=0) return {};
        gen(res,n);
        return res;
    }
    void gen(vector<string> &res,int n,int i=0,int j=0,string level=""){
        if(i>=n&&j>=n){
            res.push_back(level);return;
        }
        if(i<n)
            gen(res,n,i+1,j,level+"(");
        if(j<i&&j<n)
            gen(res,n,i,j+1,level+")");
    }
};

 

posted @ 2019-05-27 10:45  Joel_Wang  阅读(179)  评论(0编辑  收藏  举报