题目描述
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
解题思路
使用DFS回溯,主要是以下几个条件:
- 右括号 == n,回溯结束
- 左括号 < n,可以继续往后加左括号
- 左括号 < n,左括号 > 右括号,可以继续添加右括号
代码(C++)
class Solution {
public:
vector<string> ans;
vector<string> generateParenthesis(int n) {
back_trace("", n, 0, 0);
return ans;
}
void back_trace(string cur, int n, int left, int right){
if(right == n){
ans.push_back(cur);
return;
}
if(left < n){
back_trace(cur+"(", n , left+1, right);
}
if(right < left){
back_trace(cur+")", n , left, right+1);
}
}
};