22. Generate Parentheses

来源:互联网 发布:ss网络加速 编辑:程序博客网 时间:2024/06/06 16: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:

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

思路

本题是典型的卡特兰数的应用,与之类似的还有出栈次序,详情请戳卡特兰数。
本题具体的解题思路,是这样的,要求括号的组合数,那么就要找到卡特兰数的性质,总结如下,对于2n(此题测试n=3)个括号,在某个时间点,必定是左括号书大于右括号数,而且初始括号必定是左括号。那么用递归的思想来求解。递归的临界条件是:左括号剩余数与右括号剩余数同时为0。

代码

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