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

专题四:综合练习(括号组合算法深度解析)

以leetcode22题为例

题目分析:

给一个数字n,返回合法的所有的括号组合 

算法原理分析:

你可以先考虑如何不重不漏的罗列所有的括号组合

清楚什么是有效的括号组合???

1.所有的左括号的数量等于右括号的数量

2.从头开始的所有子串,左括号的数量>=右括号的数量(注意我说的是子串,而且是从头开始)

决策树的画法如下:

你每填一个位置的时候都要想一想是否符合有效的括号组合的两条性质

不符合的就可以剪枝

设计代码:

1.全局变量:我们需要返回一个字符串数组,所以需要一个ret去统计每个叶子结点

                     我们需要一个path去统计是否到了叶子结点,如果到了就放到ret中

                    我在设计剪枝的时候发现问题,我需要知道左括号和右括号的数量

                    所以我设计一个全局变量left和right分别表示左右括号的数量

2.dfs函数:关心每一个结点所做的事情,就是枚举左括号和右括号看哪一个符合,然后是否加到                       path的后面

3.细节:回溯:回上一层只需要path.pop_back()即可,还要把left和right里面的括号数量处理

              剪枝:这里我们选择只关心合法的分支

                         左括号的选择:只要还可以选择就一直选(left<n/2)

                         右括号的选择:只要还可以选&&left>right

代码编写:

注意我的dfs函数设计的n是左括号和右括号的数量和

所有我传参的时候是n*2; 

http://www.xdnf.cn/news/506125.html

相关文章:

  • 一分钟用 MCP 上线一个 贪吃蛇 小游戏(CodeBuddy版)
  • ARM-Linux 完全入门
  • Word文档图片排版与批量处理工具推荐
  • 在 Linux 上安装 MATLAB:完整指南与疑难解决方案
  • Autosar Nvm下电存储实现方式-基于ETAS工具
  • 小demo:选中树结构最后层级拿到所有层级中的deviceName并按照要求拼接
  • 嵌入式培训之数据结构学习(五)栈与队列
  • C语言:gcc 如何调用 Win32 打开文件对话框 ?
  • 543.二叉树的直径
  • CT重建笔记(五)—2D平行束投影公式
  • 5.15 学习日志
  • Java 面向对象详解和JVM底层内存分析
  • 图表制作-基础雷达图
  • 代码随想录算法训练营第60期第三十九天打卡
  • 2025.5.17 字符串hash
  • 如何利用Redis实现延迟队列?
  • 【leetcode】2900. 最长相邻不相等子序列 I
  • 数据库索引优化:如何平衡查询与写入性能
  • 劳特巴赫trace32烧录方法
  • 【Linux网络】ARP协议
  • 使用Pinia持久化插件-persist解决刷新浏览器后数据丢失的问题
  • 使用python进行船舶轨迹跟踪
  • 编译原理7~9
  • 【Element UI】表单及其验证规则详细
  • python运算符
  • python训练营打卡第26天
  • Go语言 Gin框架 使用指南
  • js中不同循环的使用以及结束循环方法
  • 两个电机由同一个控制器控制,其中一个电机发生堵转时,另一个电机的电流会变大,是发生了倒灌现象吗?电流倒灌产生的机理是什么?
  • Gartner《How to Leverage Lakehouse Design in Your DataStrategy》学习心得