括号生成-中等
难度:中等
题目描述:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 **有效的 **括号组合。
示例:
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
1
2
3
4
5
6
7
8
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
2
3
4
5
6
7
8
9
10
11