括号生成-中等

难度:中等

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


示例:

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


解题思路:
1、某一次递归终止时需要将当前字符存入数组
2、 字符任取一个位置左侧必 左括号>=右括号
3、每次递归除了需要传当前字符还需要记情当前左右括号数

let generateParenthesis = (n) => {
  let res = [];
  let dfs = (s, left, right) => {
    console.log(s, left, right);
    if (left == n && right == n) return res.push(s);
    if (left < n) dfs(s + "(", left + 1, right);
    if (right < left) dfs(s + ")", left, right + 1);
  };
  dfs("", 0, 0);
  return res;
};
1
2
3
4
5
6
7
8
9
10
11
最后更新时间: 5/21/2020, 9:35:29 PM