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:
output:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
解题思路
(1)变量说明
变量 left 用于记录能够添加的左括号的个数,right 用于记录能够添加的右括号的个数,s 代表当前生成的字符串, result 用于保存生成的字符串
(2)解题步骤
本题采用递归写法
(a)当变量 left 和 right 的值都为0时,说明所有的括号都已经成对出现,且数量为n。此时将 s 中保存的字符串存入结果数组 result ,终止递归
(b)当变量 left 的值大于0时,说明此时能够添加左括号, s 中的字符串添加 ‘(’。左括号的可添加的数量减少,变量 left 的值减1; 由于新增左括号,因此右括号的可添加的数量增加,变量 right 的值加1。进行下一轮的递归
(c)当变量 right 的值大于0时,说明此时能够添加右括号, s 中的字符串添加 ‘)’。右括号的可添加的数量减少,变量 right 的值减1;变量 left 的值保持不变。进行下一轮的递归
C++代码
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
loop(result, "", n, 0);
return result;
}
void loop(vector<string>& res, string s, int left, int right){
if(left == 0 && right == 0) {
res.push_back(s);
return;
}
if(left > 0) {
loop(res, s + "(", left-1, right+1);
}
if(right > 0) {
loop(res, s + ")", left, right-1);
}
}
};