【每天学习一点算法 2026/03/17】括号生成

每天学习一点算法 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)

相关推荐
大漠_w3cpluscom2 小时前
如何在 CSS 中正确使用 if()
前端
eason_fan2 小时前
踩坑记录:Mac M系列芯片下 pnpm dlx 触发的 esbuild 架构不匹配错误
前端·前端工程化
似水明俊德2 小时前
01-C#.Net-泛型-学习笔记
java·笔记·学习·c#·.net
swipe2 小时前
JavaScript 对象操作进阶:从属性描述符到对象创建模式
前端·javascript·面试
今儿敲了吗2 小时前
python基础学习笔记第三章
笔记·python·学习
IT_陈寒2 小时前
React开发者都在偷偷用的5个性能优化黑科技,你知道几个?
前端·人工智能·后端
hua872222 小时前
Golang 构建学习
java·开发语言·学习
还是大剑师兰特3 小时前
Vue3 前端专属配置(VSCode settings.json + .prettierrc)
前端·vscode·json
前端小趴菜053 小时前
vue3项目优化方案
前端·javascript·vue.js