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

回溯----5.括号生成

题目链接

/**

            合法括号生成规则:

                            第一个括号必须是左括号(第一个为右必定无法闭合)

                            选择过程中左括号数量必须小于n才可选择左括号(大于n则一定有括号无法闭合)

                            左括号数量必须大于右括号数量才可选择右括号(相等代表所有前驱括号都已闭合)

            所需参数:

                            left 记录已选择左括号数

                            right 记录已选择右括号数

            限制条件:

                            由于括号必定从左括号开始的特性,左括号优先级高于右括号

                            left < n --> 避免左括号超量,导致无足够右括号与之闭合

                            left > right --> 括号未全部闭合,可选择右括号与之闭合

                            两条件共同保证括号生成合法性              

*/

class Solution {//保存结果集private List<String> res = new ArrayList<>();//保存单次结果private StringBuilder tempResult = new StringBuilder();private int n;public List<String> generateParenthesis(int n) {/**合法括号生成规则:第一个括号必须是左括号(第一个为右必定无法闭合)选择过程中左括号数量必须小于n才可选择左括号(大于n则一定有括号无法闭合)左括号数量必须大于右括号数量才可选择右括号(相等代表所有前驱括号都已闭合)所需参数:left 记录已选择左括号数right 记录已选择右括号数限制条件:由于括号必定从左括号开始的特性,左括号优先级高于右括号left < n --> 避免左括号超量,导致无足够右括号与之闭合left > right --> 括号未全部闭合,可选择右括号与之闭合两条件共同保证括号生成合法性              */this.n = n;backtrack(0,0);return res;}private void backtrack(int left, int right) {//生成完毕,保存结果if(left + right == 2*n) {res.add(tempResult.toString());return;}//左括号未到上限可选择左括号if(left < n) { tempResult.append("(");left++;backtrack(left,right);//回溯left--;tempResult.deleteCharAt(tempResult.length() - 1);}//左括号未全部与右括号匹配,可选择右括号if(left > right) {tempResult.append(")");right++;backtrack(left,right);//回溯right--;tempResult.deleteCharAt(tempResult.length() - 1);}}
}

http://www.dtcms.com/a/253607.html

相关文章:

  • 如何通过 5 种方式向 Android 手机添加音乐
  • ubuntu下python版本升级导致pyqt不能正常运行解决
  • MSYS2 环境下 Python 开发配置(结合 PyCharm)使用笔记
  • RNN为什么不适合大语言模型
  • html中的table标签以及相关标签
  • ESLint从入门到实战
  • 智净未来:华为智选IAM以科技巧思优化家庭健康饮水体验
  • 2025年中总结
  • Java安全-常规漏洞问题(SQL注入,XXE,SSRF,RCE)
  • Linux系统网络服务之DCHP服务
  • RabbitMQ七种工作模式
  • Kafka入门及实战应用指南
  • 电路图识图基础知识-摇臂钻床识图(三十一)
  • 【学习笔记】2.2 Encoder-Decoder
  • 巧妙解决easyocr在cpu_mode下加载慢的问题~
  • Pandas 核心数据结构详解:Series 和 DataFrame 完全指南
  • MyBatisPlus——逻辑删除
  • import jsonlines ModuleNotFoundError: No module named ‘jsonlines‘
  • 什么是 OpenFeigin ?微服务中的具体使用方式
  • 专业音乐播放器分享,Foobar2000多格式解码的技术实现,界面自定义的实用技巧
  • 【栈】------例题1【铁轨 Rails】
  • react 自定义状态管理库
  • MySQL中的SELECT FOR UPDATE的用法与原理
  • Linux系统移植11:修改网络驱动
  • Python数据操作
  • 大模型的微调和RAG,是如何选择的?
  • 华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己dify钉钉群聊机器人
  • 国产服务器【银河麒麟v10】【CPU鲲鹏920】部署es 7.15.2
  • Android 的AppBarLayout 与LinearLayput的区别
  • AntV G 入门教程