题目:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
思路:
题目要我们输出特定对数的所有括号组合。
将该问题分为两个小问题:
1. 正确的输出肯定从左括号开始。则先输入左括号
2. 在输入左括号之后,在小于左括号的前提下输出右括号,使之对等。
边界条件:
在左右括号数对等时即可输出。
程序:
class Solution {
public:
vector<string> res;
vector<string> generateParenthesis(int n) {
string s;
dfs(0,0,n,s);
return res;
}
void dfs(int left, int right,int n, string s){
if (left == right && left == n)
res.push_back(s);
if (left < n)
dfs(left+1,right,n,s+'(');
if (right < left)
dfs(left,right+1,n,s+')');
}
};