22. Generate Parentheses(unsolved)

来源:互联网 发布:按键精灵读取数据库 编辑:程序博客网 时间:2024/06/05 20:36

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:    vector<string> generateParenthesis(int n) {        vector<string> v;        addstr( v,"",n,0);        return v;    }    void addstr(vector<string>& v,string str,int n,int m)    {        if(n==0&&m==0)        {            v.push_back(str);            return;        }        if(n>0) addstr(v,str+"(",n-1,m+1);        if(m>0) addstr(v,str+")",n,m-1);    }};

二刷的时候做出来了,要注意nleft<=nright,否则会出现“(()))(”的情况。
我的思路是先把( 放入,全部放入后,然后再把 ) 放入。弹回上好几层后,发现可以再放入),然后放入(。 反正顺序就是:

[“((()))”,”(()())”,”(())()”,”()(())”,”()()()”]

class Solution {public:    vector<string> generateParenthesis(int n) {        if(n==0) return result;        backtrack(n,n,"");        return result;    }    void backtrack(int nleft,int nright,string temp)    {        if(nleft>0&&nleft<=nright)        {            backtrack(nleft-1,nright,temp+"(");        }        if(nright>0&&nleft<=nright)        {            backtrack(nleft,nright-1,temp+")");        }        if(nleft==0&&nright==0)            result.push_back(temp);    }private:    vector<string> result;};
0 0
原创粉丝点击