1、题目描述
数字 n 代表生成括号的对数,设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
2、解题思路
1、分析题意,考虑递归中的回溯二叉树,有效的括号即左右括号要对应
1.1、每放置一个左括号,便可以放置一个右括号,并且在左括号数量小于 n 时依然可以放置左括号(形成二叉树,在满足左括号数量小于 n 的情况下把新的节点当做根节点)
2、定义一个数组容器用来存放符合条件的括号组合,定义一个空字符串用来写入括号
3、定义函数(涉及递归不可用匿名函数)
3.1、左括号数量不大于 n 时可以添加左括号
3.2、左括号数量大于右括号时可以添加右括号
4、当左右括号数量和达到 2*n 时把字符串push()进容器数组
5、返回容器数组,即为所求所有可能的并且 有效的 括号组合
3、解题代码
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function (n) {
let res = [];
var drow = (cur, left, right) => {
if (cur.length === 2 * n) {
res.push(cur);
return;
}
if (left < n) {
drow(cur + "(", left + 1, right)
}
if (left > right) {
drow(cur + ")", left, right + 1);
}
};
drow("", 0, 0);
return res;
};