数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

**输入:**n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

**输入:**n = 1
输出:["()"]

提示:

1 <= n <= 8

按照顺序摆放括号,记下左右括号可摆放的数量

当左右括号可放数量相等时只能放左括号,

当左右括号数量不等时,一定是左括号数<右括号数,此时只要可放数量不为零,可放左也可放右

都放完时记录当前括号结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<string> ans;
vector<string> generateParenthesis(int n) {
generate("", n, n);
return ans;
}

void generate(string mid, int l, int r) {
if (l == 0 && r == 0) {
ans.push_back(mid);
return;
}
if (l == r) {
generate(mid + "(", l - 1, r);
} else {
if (l > 0)
generate(mid + "(", l - 1, r);

generate(mid + ")", l, r - 1);
}
}
};