Generate Parentheses

来源:互联网 发布:网站主域名 编辑:程序博客网 时间:2024/05/21 06:57

题目描述:

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:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]
解题思路:

使用递归,用两个变量left和right分别表示剩余的左括号和右括号的数目,
如果left=0 且right=0,表示左括号和右括号已经全部输出
如果left>0,那么下一个可以输出一个左括号
如果left=0 或left<right ,那么下一个可以输出一个右括号


AC代码如下:

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


0 0