# 22.括号生成

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

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

1
2
3
4
5
6
7
8
9

# 思路

img

# 代码

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    const res = []
    let dfs = (lRemain,rRemain,str) => {
        if(str.length == 2 * n) {
            res.push(str)
            return 
            // 构建完成
        }
        if(lRemain > 0) {
            // 左括号还有剩余时
            dfs(lRemain-1,rRemain,str+'(')
        }
        if(lRemain < rRemain) {
            // 右括号大于左括号时才可以加入右括号
            dfs(lRemain,rRemain-1,str+')')
        }
    }
    dfs(n,n,'') // 递归入口,剩余数量都是n,初始字符串为空串
    return res
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24