文心 LeetCode 22. 括号生成 Golang实现

发布时间:2026/11/4 5:50:20
文心    LeetCode 22. 括号生成 Golang实现 LeetCode 22. 括号生成 — Golang 实现问题描述给定n对括号生成所有由n对括号组成的有效格式正确的括号组合。输入: n 3输出: [“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]解题思路回溯法核心规则• 任意时刻左括号数left≥ 右括号数right保证合法性• 左括号总数 ≤n• 右括号总数 ≤n“” / \ “(” 无效(leftright) / \ “((” “()” / \ / “(((” “(()” “()(” “())” ← “())” 非法leftright…代码实现方法一回溯推荐【go】package mainimport “fmt”func generateParenthesis(n int) []string {var result []stringbacktrack(result, “”, 0, 0, n)return result}// backtrack 回溯函数// left: 已使用的左括号数// right: 已使用的右括号数func backtrack(result[]string, current string, left, right, n int) {// 终止条件当前字符串长度达到 2nif len(current) 2*n {*result append(*result, current)return}// 尝试添加左括号if left n {backtrack(result, current“(”, left1, right, n)}// 尝试添加右括号必须 left right 才合法if right left {backtrack(result, current“)”, left, right1, n)}}func main() {fmt.Println(generateParenthesis(3))// 输出: [((())) (()()) (())() ()(()) ()()()]}方法二迭代方式BFS 队列【go】func generateParenthesis2(n int) []string {if n 0 {return []string{“”}}var result []string// 队列元素: [当前字符串, 左括号数, 右括号数]queue : [][3]interface{}{{“”, 0, 0}}for len(queue) 0 {cur : queue[0]queue queue[1:]s : cur[0].(string)left : cur[1].(int)right : cur[2].(int)if left n right n {result append(result, s)continue}if left n {queue append(queue, [3]interface{}{s “(”, left 1, right})}if right left {queue append(queue, [3]interface{}{s “)”, left, right 1})}}return result}复杂度分析【表格】指标 值时间复杂度 O(4ⁿ/√n)即第 n 个卡特兰数空间复杂度 O(4ⁿ/√n)结果存储 O(n)递归栈深关键点总结剪枝条件right left → 才能放右括号2. 终止条件left n right n → 字符串长度为 2*n3. 字符串拼接Go 中使用 拼接每次产生新字符串

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询