每天学习一点算法 2026/03/17
题目:括号生成
数字
n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
通过观察可以发现两点规律:
- 左括号总数等于右括号总数
- 无论从括号字符串哪个地方截取,左括号数量都是大于等于有括号数量的
根据这个规律我们就可以总结出,递归选择括号字符的边界
typescript
function generateParenthesis(n: number): string[] {
if (n < 1) return []
const res = []
function helper (str: string, left: number, right: number) {
// 如果左右括号都用完了,代表括号组合生成完毕
if (left === 0 && right === 0) {
res.push(str)
return
}
if (left > 0) {
// 左括号有剩余的时候才能选择左括号
helper(str + '(', left - 1, right)
}
if (right > left) {
// 右括号数量大于左括号时才能选择右括号
helper(str + ')', left, right - 1)
}
}
// 初始传入左右括号总数
helper('', n, n)
return res
}
题目来源:力扣(LeetCode)