Skip to content
On this page

22. 括号生成

原题链接:LeetCode 22. 括号生成

题目描述

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

示例 1:

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

示例 2:

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

提示:

- `1 <= n <= 8`

难度: Medium


题解代码

javascript
/**
 * @param {number} n
 * @return {string[]}
 */
 var generateParenthesis = function(n) {
  const res = []
  backTrack('', 0, 0, n, res)
  return res
};

function backTrack (path, left, right, n, res) {
  if (path.length === 2 * n) {
      res.push(path)
  }
  // 
  if (left < n) {
      path += '('
      backTrack(path, left + 1, right, n, res)
      path = path.slice(0, -1)
  }
  // 这里left > right条件是减枝
  if (left > right) {
      path += ')'
      backTrack(path, left, right + 1, n, res)
      path = path.slice(0, -1)
  }
}

技术文档集合