# 22.括号生成
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 思路
# 代码
/**
* @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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
← 17.电话号码的字母组合 39. 组合总和 →