当前位置: 首页 > news >正文

深入解析:【LeetCode 热题100】回溯:括号生成 组合总和(力扣22 / 39 )(Go语言版)

? 回溯专题:括号生成 & 组合总和(LeetCode 22 & 39)

LeetCode 回溯经典题:

这两道题都考察了回溯算法的剪枝与路径构造能力


? 一、22. 括号生成

? 题目描述

给你一个整数 n,请你生成所有由 n 对括号组成的有效括号组合

? 示例

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

? 解题思路

这是一道典型的回溯搜索问题,我们通过维护左右括号的使用数量来构造合法的组合。

✅ 回溯核心逻辑:
  • 初始状态:left = 0, right = 0

  • 分支选择:

    • 如果 left < n:可以添加 '('
    • 如果 right < left:可以添加 ')'
  • 当左右括号都用完(即 left == right == n)时,将当前路径加入结果集。

? Go 实现
func generateParenthesis(n int
) []string {
var res []string
var backtrack func(path string
, left, right int
)
backtrack =
func(path string
, left, right int
) {
if len(path) == 2*n {
res = append(res, path)
return
}
if left < n {
backtrack(path+"("
, left+1
, right)
}
if right < left {
backtrack(path+")"
, left, right+1
)
}
}
backtrack(""
, 0
, 0
)
return res
}

⚠️ 注意事项


? 二、39. 组合总和

? 题目描述

给你一个无重复正整数数组 candidates,和一个目标整数 target,找出所有可以使数字和为 target 的组合。
每个数可以重复使用无限次

? 示例

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]

? 解题思路

这是标准的回溯 + 剪枝问题,本质是一个组合问题

✅ 回溯核心逻辑:
? Go 实现
func combinationSum(candidates []int
, target int
) [][]int {
var res [][]int
var path []int
var dfs func(start, sum int
)
dfs =
func(start, sum int
) {
if sum == target {
temp := make([]int
, len(path)
)
copy(temp, path)
res = append(res, temp)
return
}
if sum > target {
return
}
for i := start; i <
len(candidates)
; i++ {
path = append(path, candidates[i]
)
dfs(i, sum + candidates[i]
) // 可重复使用同一个数
path = path[:len(path)-1] // 回溯
}
}
dfs(0
, 0
)
return res
}

⚠️ 注意事项


? 总结与对比

特性括号生成(22)组合总和(39)
技巧类型回溯 + 状态剪枝回溯 + 剪枝 + 组合
路径构建逻辑括号平衡 + 左右限制数组和满足目标
剪枝条件right <= left,括号合法sum <= target
是否可重复选择
输出顺序所有合法括号所有合法组合

这两道题分别属于回溯算法中常见的「字符串构造类问题」与「数字组合类问题」。


? 结语


http://www.gsyq.cn/news/17303.html

相关文章:

  • 完整教程:基于 COM 的 XML 解析技术(MSXML) 的总结
  • PCIe扫盲——链路初始化与训练基础(二)
  • VMware ESXi 8.0U3g macOS Unlocker OEM BIOS 2.7 H3C 新华三 定制版
  • [计算机组成] 计算机字体文件及其运行原理
  • 滚动导航 - unique
  • C#基础:启用线程池执行并行任务
  • P1545 [USACO04DEC] Dividing the Path G 题解
  • java作业2
  • 关于PPT的课后作业
  • RK 系列 GPU 驱动检查方法
  • 算法第一章
  • mac打开app提示文件损坏解决方案
  • 考研系列—操作系统:冲刺笔记(1-3章) - 指南
  • 2025工业网线优质厂家最新推荐榜:品质卓越与技术领先之选
  • sg.Multiline 和 sg.Output 有什么区别?怎么看起来一样?
  • Syncfusion重构Essential Studio套件,为开发者提供更灵活选择
  • 2025 年逸发粘接认证推荐:依托德系标准与全链条服务,打造粘接及复材技术解决方案优质选择
  • Prj09--8088单板机C语言8253产生1KHz方波(1) - 详解
  • Rocky9系统Grub修复实验
  • Linux 与 Windows:哪个操作便捷的系统适合你?
  • 2025 年绞车源头厂家最新推荐榜:双速 / 回柱 / 张紧等设备优质直供企业,口碑与实力兼具!张紧/运输/凿井/矿用绞车厂家推荐
  • set 初始化
  • PCIe扫盲——链路初始化与训练基础(一)
  • 2025 波纹管生产厂家最新推荐榜:预应力 / 镀锌金属等品类精选,成都津钢领衔优质品牌清单
  • 2025 年国内废气处理厂商最新推荐排行榜:聚焦综合实力与服务能力,精选优质品牌助企业合规转型
  • 书缘幡云世界(1).众阳之阳.epub
  • 2025 年最新推荐铁附件实力厂家榜单:涵盖电力金具 / 热镀锌 / 线路 / 10 - 35KV 等多类型产品,助力工程方精准筛选优质合作企业
  • c++/c语音分号的使用情况
  • PCIe扫盲——物理层逻辑部分基础(三)
  • 2025 年景观石厂家最新推荐榜单:千层石 / 泰山石等各类景观石优质企业全方位解析及选购指南驳岸石/太湖石/龟纹石/草坪石景观石厂家推荐