Description:
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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
简要题解:
从左到右开始统计,无论何时左括号的数量一定都大于或等于右括号的数量。
可以从空状态开始,逐步尝试在右边添加一个括号。配合使用递归+回溯的方法可找出所有合法的组合。
代码:
class Solution {
public:
vector<string> generateParenthesis(int n) {
result.clear();
recurGenerate("", n, n);
return result;
}
private:
vector<string> result;
void recurGenerate(string s, int l, int r) {
if (0 == l && 0 == r) {
result.push_back(s);
return;
}
if (l > r)
return;
if (l > 0)
recurGenerate(s + "(", l - 1, r);
if (r > 0)
recurGenerate(s + ")", l, r - 1);
}
};