Leetcode: 22. Generate Parentheses
Description
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路
- 不用想,肯定是递归
- 刚开始错误的思路:把一对括号看成一组,然后列举两种情况,然后就错了
- 正确的思路:
- 分析一下括号的形式,刚开始肯定是左括号,然后可以是左,可以是右,当左括号用完的时候,全部添右括号。
- 当左括号个数大于右括号时,可以加右括号
- 详见代码
代码
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
getParenthesis(n, 0, 0, "", res);
return res;
}
void getParenthesis(int n, int l, int r, string path, vector<string> &str){
if(l == n){
str.push_back(path.append(n - r, ')'));
return;
}
getParenthesis(n, l + 1, r, path + "(", str);
if(l > r)
getParenthesis(n, l, r + 1, path + ")", str);
}
};