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

示例:

1
2
3
4
5
6
7
8
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function generate(n) {
var arr = []
every(0, 0, n, '')
function every (left, right, max, cur) {
// 递推终结条件
if (left === max && right === max) {
arr.push(cur)
return
}
// 下一层
if (left < max) {
every(left + 1, right, max, cur + '(')
}
if (left > right) {
every(left, right + 1, max, cur + ')')
}
}
return arr
}
generate(3) // ["((()))", "(()())", "(())()", "()(())", "()()()"]