# 括号生成

# 题目

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

示例:

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

# 思路

  • 左括号未用完,继续添加左括号
  • 右括号少于左括号,右括号继续增加
  • 直到左右括号全部用完

# 代码

function generateParenthesis(n) {
  const result = []
  function handle(left, right, total, s) {
    if (left === total && right === total) {
      result.push(s)
      return
    }

    if (left < total) handle(left + 1, right, total, s + '(')
    if (left > right) handle(left, right + 1, total, s + ')')
  }
  handle(0, 0, n, '')
  return result
}