括号生成
liuguanyu opened this issue · comments
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
var res = []
var _g = (ls, rs, stack) => {
if (ls == rs && ls == n){
res.push(stack)
return
}
if (ls < n){
_g(ls+1, rs, stack + '(')
}
if (rs < ls){
_g(ls, rs+1, stack + ')')
}
}
_g(0, 0, "")
return res
};
/**
* @param {number} n
* @return {string[]}
*/
// dfs
// var generateParenthesis = function(n) {
// function traceBracket(l, r, temp, result) {
// if (r == 0) {
// result.push(temp)
// return
// }
// if(l < r) {
// traceBracket(l, r-1, temp + ')', result)
// }
// if (l > 0) {
// traceBracket(l-1, r, temp + '(', result)
// }
// }
// const res = []
// traceBracket(n, n, '', res)
// return res
// };
var generateParenthesis = function(n) {
const res = [['']]
for(let i = 1; i<n+1; i++) {
const cur = []
for(let j = 0; j < i; j++) {
const left = res[j]
const right = res[i - 1 - j]
left.forEach(function(s1) {
right.forEach(function(s2) {
cur.push(`(${s1})${s2}`)
})
})
}
res[i] = cur
}
return res[n]
};