[Leetcode]Generate Parentheses

来源:互联网 发布:网络另类说唱歌手 编辑:程序博客网 时间:2024/05/15 23:50

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"


class Solution {public:    /*algorithm , DFS        brute force        generate all pairs,for each, check its valid    */    bool validPair(string s){        stack<char>stk;        for(int i = 0;i < s.size();i++){            if(s[i] == '(')stk.push('(');            else{                if(stk.empty() || stk.top() != '(')                    return false;                stk.pop();            }        }        return stk.empty();    }    void dfs(vector<string>&pairs,string pair,int n){        if(pair.size()==n){            if(validPair(pair))pairs.push_back(pair);            return;        }        string symbol[2]={"(",")"};        for(int i = 0;i < 2;i++){            if(pair.empty() && symbol[i]==")")continue;            dfs(pairs,pair+symbol[i],n);        }    }    vector<string> generateParenthesis(int n) {        vector<string>pairs;        dfs(pairs,"",n*2);        return pairs;    }};



class Solution {public:    /*algorithm , DFS        before add ")" and "(",keep cnt("(") >= cnt(")")    */    void dfs(vector<string>&pairs,string pair,int n,int lcnt,int rcnt){        if(pair.size()==(2*n)){            pairs.push_back(pair);            return;        }        if(lcnt < n){            dfs(pairs,pair+"(",n,lcnt+1,rcnt);        }        if(lcnt > rcnt){            dfs(pairs,pair + ")",n,lcnt,rcnt+1);        }    }    vector<string> generateParenthesis(int n) {        vector<string>pairs;        dfs(pairs,"(",n,1,0);        return pairs;    }};


0 0
原创粉丝点击