当前位置: 首页 > 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);}}
}

相关文章:

  • 如何通过 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多格式解码的技术实现,界面自定义的实用技巧
  • 网站双机热备怎么做/社交网络推广方法有哪些
  • 网站建设与管理实训课程/软考培训机构排名
  • 移动网站 案例/郑州网络营销推广公司
  • 企业网站欣赏/上海网络优化服务
  • java和HTML做网站/百度网盘电脑版下载
  • 免费流量网站推广/关键词优化排名详细步骤