# 22. 括号生成

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
function generateParenthesis(n) {

  let res = [];
  function backTrack(cur = '', open, close) {
    if (cur.length === 2*n) {
      res.push(cur)
    } else {
      if (open < n) {
        backTrack(cur+"(", open+1, close);
      }

      if (close < open) {
        backTrack(cur+")", open, close+1);
      }
    }
  }

  backTrack('', 0, 0)
  return res
}

console.log(generateParenthesis(3))

总结:

回溯算法,写这道题的时候回溯算法使用正确,但是对字符串传的拼接技巧上,出现了错误的设计,我采用迭代字符串然后插入,这样就导致了结果有重复!! 题解里对字符串拼接,使用的有点类似括号闭合的技巧,get!