题意:
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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:
开始想递归,每个空可以放左括号和右括号,最后判断是否合法。
然鹅。
不合法的情况就是在放置过程中,右括号个数大于左括号个数。最后左括号和右括号个数都是n时,合法串。
递归,然后应该多多注意边界条件。
代码:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ans;
dfs(ans, "", 0, 0, n);
return ans;
}
void dfs(vector<string>& ans, string cur, int l, int r, int n) {
if (r > l) {
return;
}
if (r > n || l > n) {
return;
}
if (r == n && l == n) {
ans.push_back(cur);
return;
}
dfs(ans, cur+"(", l+1, r, n);
dfs(ans, cur+")", l, r+1, n);
return;
}
};
啊。。。明天就放假惹。。希望我在家能多刷两道题。
实验什么的。。跑不出来就算了。。身心俱疲.jpg