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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
Solution:
递归求解,参数cur表示当前的字符串,left表示还可以加左括号的个数,right表示必须加右括号的个数。那么对于当前的cur,就可以要么给它加一个左括号,要么加一个右括号,然后继续往下递归。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ret;
helper("", n, 0, ret);
return ret;
}
void helper(string cur, int left, int right, vector<string> & ret) {
if (!left) {
for (int i = 0; i < right; i++)
cur += ")";
ret.push_back(cur);
return;
}
helper(cur+"(", left-1, right+1, ret);
if (right)
helper(cur+")", left, right-1, ret);
}
};