22. Generate Parentheses
问题描述
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) {
vector<string> result;
execute("", "(", n, 1, 0, result);
return result;
}
void execute(string tmp, string next, int n, int l, int r, vector<string> &result) {
tmp += next;
if (l < r || l > n || r > n) return;
if (l == n && r == n) {
result.push_back(tmp);
return;
}
execute(tmp, "(", n, l + 1, r, result);
execute(tmp, ")", n, l, r + 1, result);
}
};