数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
const res = []
const recursion = (left, right, str) => {
if (left === n && right === n) {
res.push(str)
return
}
if (left < n) {
// 加左括号
recursion(left + 1, right, str + '(')
}
if (right < left) {
// 在左括号的基础上填充右括号
recursion(left, right + 1, str + ')')
}
}
recursion(0, 0, '')
return res
};