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

leetcode 22.括号生成

思路:dfs回溯

其实这道题看起来很像栈,但考虑到多种可能方案输出,我们需要用dfs来做。

乍一看好像没啥思路。我们可以从括号的特点入手,括号我们知道都是成对存在的,那么无论多少对括号,其实第一个符号肯定是'(',而最后一个符号肯定是')'。剩下的,我们就可以认为是在这个大括号里面进行排序了。

排序的时候我们需要注意三个点,其实就是dfs剪枝需要注意的三个点:

第一,当‘(’的个数比‘)’的个数少的时候,证明我们没有正确的括号来匹配了,也就是无效,这时不能匹配括号;

第二,当‘(’的个数要大于所给n的时候,说明我们的括号符号超过了,不能匹配;

第三,当')'的个数要大于所给n的时候,同理,不能匹配。

这样,我们再进行选择符号。

dfs中需要这么几个参数,string字符串:记录可能结果,用来存入集合当中;num1,num2分别表示'('和')'的个数;n是所给的括号对数。

针对于大括号中的每一个位置,我们都需要抉择是选择‘(’还是')',不能不选。

这里首先就默认为字符串里面有第一个字符'('了。

最后在满足条件的情况下,再加入')',之后存入集合才是正确的。因为这里dfs中我的'('个数是1,而')'个数是0,而不是1(有些人会想着把num2设置成1,其实也可以,改变一下满足条件即可)。

class Solution {List<String>list=new ArrayList<>();public List<String> generateParenthesis(int n) {StringBuilder buf=new StringBuilder();buf.append("(");dfs(buf,n,1,0);return list;}public void dfs(StringBuilder buf,int n,int num1,int num2){if(num1>n)return;if(num2>n)return ;if(num1<num2)return;if(num1+num2==n*2-1){buf.append(")");list.add(buf.toString());buf.deleteCharAt(buf.length()-1);return ;}buf.append(")");dfs(buf,n,num1,num2+1);buf.deleteCharAt(buf.length()-1);buf.append("(");dfs(buf,n,num1+1,num2);buf.deleteCharAt(buf.length()-1);}
}

http://www.lryc.cn/news/457889.html

相关文章:

  • 如何启动一个OpenSearch
  • 自媒体工具箱 v1.0,支持涂抹加水印、无水印下载、加水印、消除原声、视频压缩
  • python 自学总结
  • Java - WebSocket
  • 【大模型】RMS Normalization原理及实现
  • 视觉检测系统实时识别工地安全帽佩戴情况
  • 【element-tiptap】报错Duplicate use of selection JSON ID cell at Selection.jsonID
  • STM32工程环境搭建(库函数开发)
  • 大数据新视界 --大数据大厂之大数据如何重塑金融风险管理:精准预测与防控
  • 【C# 网络编程】基本概念
  • 系统架构设计师-下午案例题(2018年下半年)
  • StarRocks报错:Getting analyzing error. Detail message: Unknown database ‘你的库名‘.
  • 【原创教程】电气电工23:电气柜的品牌及常用型号
  • AI引起用人格局变动,个人如何应对这一趋势
  • 小程序项目实践(一)--项目的初始化以及前期的准备工作
  • 宝藏CSS样式网站,开发一些酷炫的特效
  • vscode报错No module named ‘Crypto‘
  • 机器学习中的多模态学习:用C/C++实现高效模型
  • Java 运行机制及运行过程
  • IC开发——数字电路设计简介
  • openmmlab实现图像超分辨率重构
  • 四、远程登录到Linux服务器
  • Qt开发全指南:从基础到高级
  • 【算法】——双指针算法合集(力扣)
  • 小猿口算自动PK脚本
  • 蓝桥杯备赛(c/c++)
  • LLM大模型预测耗时的粗略估计以及sft和continue pre-train的区别
  • go和python打包项目对比
  • EmEditor传奇脚本编辑器
  • 基于JAVA+SpringBoot+Vue的实习管理系统