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

思路

  1. 从左往右书写括号,书写过程中,始终满足右括号的个数小于等于左括号个数
  2. 模拟书写,left < n, right < left 时进行相应递归
  3. right === n 时,结束递归
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var generateParenthesis = function (n) {
const result = []
const handler = (curStr, left, right) => {
if (right === n) {
result.push(curStr)
return
}
if (left < n) {
handler(curStr + '(', left + 1, right)
}
if (right < left) {
handler(curStr + ')', left, right + 1)
}
}
handler('', 0, 0)
return result
}