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

2025年- H73-Lc181--22.括号生成(回溯,组合)--Java版

1.题目描述
在这里插入图片描述

2.思路
在这里插入图片描述
在这里插入图片描述
(1)终止条件:如果当前字符串长度为 2 * n,说明括号已经填满(n 个左括号和 n 个右括号),加入结果列表并返回。
(2)如果还没用完所有的左括号(open < n),就可以继续加左括号。递归调用:左括号数量加 1,继续构造。回溯关键步骤:撤销上一步加的括号,回到上一个状态,尝试其他组合。
(3)如果当前右括号数量比左括号少(close < open),则可以加一个右括号。
与左括号逻辑类似:加右括号 → 递归 → 撤销(回溯)。
(4)new stringbuffer()是可变字符串长度

3.代码实现

import java.util.ArrayList;
import java.util.List;public class H22 {public List<String> generateParenthesis(int n) {//保存括号字符串的结果List<String> result=new ArrayList<>();//可变字符串,存储回溯过程中的括号StringBuffer sb=new StringBuffer();//第1个0代表左括号的数量,第2个0代表右括号的数量,n代表括号对的数量backTracking(result,sb,0,0,n);return result;}public void backTracking(List<String> result,StringBuffer cur,int left,int right,int n){if(cur.length()==n*2){result.add(cur.toString());}//先拿左括号和要生成的括号对数进行比较,之后左括号填满之后,开始补齐右括号,如果右括号数量小于左括号数量,补齐右括号if(left<n)//如果左括号小于输入的括号对数{cur.append('(');backTracking(result,cur,left+1,right,n);cur.deleteCharAt(cur.length()-1);//cur.length()-1是整数,cur是可变字符串,所以要用到cur.deleteCharAt(index)}if(right<left){//右括号数量少(右括号小于左括号),开始补齐右括号cur.append(')');backTracking(result,cur,left,right+1,n);cur.deleteCharAt(cur.length()-1);}}public static void main(String[] args){H22 test=new H22();int n=3;List<String> ans=test.generateParenthesis(n);System.out.print(ans);}
}

相关文章:

  • intelrealsense深度相机产品介绍
  • Linux(线程控制)
  • 安卓基础(ProGuard vs R8)
  • 『React』Fragment的用法及简写形式
  • React - 组件通信
  • 使用React+ant Table 实现 表格无限循环滚动播放
  • 自托管图书搜索引擎Bookologia
  • next,react封装axios,http请求
  • react 常见的闭包陷阱深入解析
  • 2025 cs144 Lab Checkpoint 3: TCP Receiver
  • React 列表 Keys
  • 【React】useId
  • Python打卡训练营day46——2025.06.06
  • Linux 服务管理与自启动配置全解析:rc.d、systemctl与service对比
  • Jpackage
  • vue-print-nb 打印相关问题
  • vue+elementUI+springboot实现文件合并前端展示文件类型
  • 2025年,百度智能云打响AI落地升维战
  • K7 系列各种PCIE IP核的对比
  • 车牌识别技术解决方案
  • 建立网站的英文怎么说/seo外链推广工具下载
  • 足球外围网站怎么做/网络网站推广优化
  • 欧美设计网站推荐/百度推广手机版
  • 微信小程序怎么添加/杭州网站运营十年乐云seo
  • 网站成功案例分析/常州seo第一人
  • 如何自己做网站发布到服务器上面/合肥网络seo推广服务