Leetcode-22.Generate Parentheses

来源:互联网 发布:好看的韩剧 知乎 编辑:程序博客网 时间:2024/04/30 23:25

Problem description:
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:

“((()))”, “(()())”, “(())()”, “()(())”, “()()()”


Analysis: It’s a dfs problem with backtracking .
First we need to figure out,
there are two ways to add a left or right parentheses to the current string.

If number of ( is less than n, you can add (;If number of ) is less than number of (, you can add ).

Then we could add left or right parentheses, at each level of recursion.


codes:

class Solution {public:    vector<string> generateParenthesis(int n) {        vector<string> res;        if(n==0)return res;        string s;        combine(res,s,n,0);        return res; } void combine(std::vector<string>& res,string s,int left,int right) {        if(left==0&&right==0)        {            res.push_back(s);            return;        }        if(left>0)            combine(res,s+'(',left-1,right+1);        if(right>0)            combine(res,s+')',left,right-1); }};

slow method:

 vector<string> generateParenthesis(int n) {        vector<string> res;        string s="()";        if(n==0)return res;        if(n==1)        {            res.push_back(s);            return res;        }        combine(res,n-1,s);        return res;         }    void combine(vector<string> &res,int n,string s){        //cout<<n<<" "<<s<<endl;        int i;        if(n==0){        vector<string>::iterator it=find(res.begin(),res.end(),s);            if(it==res.end())            res.push_back(s);            return;        }               int count=s.size();                vector<string> tmp;                for(i=0;i<count/2+1;i++)                {                string t=s;                t=t.insert(i,"()");                //vector<string>::iterator result = find(tmp.begin( ),tmp.end( ),t);                 //if (result == tmp.end( ) )                 combine(res,n-1,t);                //else   continue;                }            //combine(n-1,s.insert(i,"()"));    }
0 0
原创粉丝点击