js_algorithm
js_algorithm copied to clipboard
括号生成
leetcode: https://leetcode-cn.com/problems/generate-parentheses/
题目难度
medium
,涉及到的算法知识有递归、回溯。
题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路分析
这道题目通过递归去实现。
因为左右括号需要匹配、闭合。所以对应“(”和“)”的数量都是n
,当满足这个条件时,一次递归就结束,将对应值放入结果数组中。
这里有一个潜在的限制条件:有效的
括号组合。对应逻辑就是在往每个位置去放入“(”或“)”前:
- 需要判断“(”的数量是否小于n
- “)”的数量是否小于“(”
代码实现
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
let res = []
const generate = (cur, left, right) => {
if (left ===n && right === n) {
res.push(cur)
return
}
if (left < n) {
generate(cur + '(', left + 1, right)
}
if (right < left) {
generate(cur + ')', left, right + 1)
}
}
generate('', 0, 0)
return res
};