Question:
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
给定数组n,求n对括号可以组成的括号序列。
因为数字为n,所以每个字符串长度为2n,根据括号规则我们可以知道,在第1到第2n的任一个位置都满足:左括号的个数大于等于右括号的个数。
所以,在位置k还剩余left个左括号和right个右括号
如果left>0,则可以打印左括号;
而right必须小于等于left,right<=left,否则不能打印右括号。
当right==0 && left==0的时候,说明有了一个合法的序列,可以将其存储起来。
代码如下:
<span style="font-size:14px;">class Solution {
public:
vector<string> res;
vector<string> generateParenthesis(int n) {
if(n <= 0)
return res;
generateParenthsisHelper(n,n,"");
return res;
}
void generateParenthsisHelper(int left,int right,string s){
if(right == 0)
res.push_back(s);
else{
if(left > 0){
generateParenthsisHelper(left-1,right,s+"(");
}
if(right > left){
generateParenthsisHelper(left,right-1,s+")");
}
}
}
};</span>