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

算法-字符串-22.括号生成

一、题目

二、思路解析

        1.思路:

                生成所有可能并且有效的括号组合——回溯方法

        2.常用方法:

                a.数组,因为需要增删元素,所以选择LinkedList

LinkedList<String> res=new LinkedList<>();

                b.StringBuilder创建,因为要拼接字符

StringBuilder sb=new StringBuilder();

                 c.删除sb中的某一个字符,因为要进行回溯

sb.deleteCharAt(s.length()-1);

                d.stringBuilder对象转string对象

String str=sb.toString();

        3.核心逻辑:

                a.回溯模板:

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

         b.终止条件:当sb中的长度等于n*2时

if(sb.length()==n*2){res.add(sb.toString());return ;
}

        c.回溯过程:

                 首先,必然是先放'(',才会有效,同时'('的数量不能超过n

if(open<n){sb.append('(');back(res,sb,n,open+1,close);//进行回溯sb.deleteCharAt(sb.length()-1);
}

                当'('的数量大于')'的时候,就可以放入')'是有效的

if(close<open){sb.append(')');back(res,sb,n,open,close+1);sb.deleteCharAt(sb.length()-1);
}

三、代码实现

class Solution {public List<String> generateParenthesis(int n) {List<String> res=new LinkedList<String>();StringBuilder sb=new StringBuilder();back(res,sb,n,0,0);return res;}void back(List<String> res,StringBuilder sb,int n,int open,int close){if(sb.length()==n*2){res.add(sb.toString());return ;}if(open<n){sb.append('(');back(res,sb,n,open+1,close);sb.deleteCharAt(sb.length()-1);}if(close<open){sb.append(')');back(res,sb,n,open,close+1);sb.deleteCharAt(sb.length()-1);}}
}

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

相关文章:

  • Free-RTOS实现LED闪烁
  • NLP论文速读(斯坦福大学)|使用Tree将语法隐藏到Transformer语言模型中正则化
  • 再谈多重签名与 MPC
  • CTF学习24.11.19[音频隐写]
  • vue的watch是否可以取消? 怎么取消?
  • 23、枚举
  • Java基本概念
  • C++学习——如何析构派生类
  • SpringCloud与Dubbo的区别
  • C# 设计模式--建造者模式 (Builder Pattern)
  • leetcode 23. 合并 K 个升序链表
  • 【Redis】深入解析Redis缓存机制:全面掌握缓存更新、穿透、雪崩与击穿的终极指南
  • SQL语法——DQL查询
  • 云计算.运维.面试题
  • 基于vue和vite的计算器
  • 《OpenCV:视觉世界的魔法钥匙》
  • 部署kafka并通过python操作
  • 【JAVA】Java高级:数据库监控与调优:SQL调优与执行计划的分析
  • 【单片机开发】MCU三种启动方式(Boot选择)[主Flash/系统存储器(BootLoader)/嵌入式SRAM]
  • 跨库移植 SQL
  • (软件测试文档大全)测试计划,测试报告,测试方案,压力测试报告,性能测试,等保测评,安全扫描测试,日常运维检查测试,功能测试等全下载
  • Vue前端开发-路由跳转及带参数跳转
  • 服务器上安装 Node.js
  • 在阿里云/Linux环境搭建Gitblit服务
  • MicroBlaze软核开发(二):GPIO
  • threejs相机辅助对象cameraHelper
  • Luma 视频生成 API 对接说明
  • 服务器数据恢复—EVA存储硬盘磁头和盘片损坏离线的数据恢复案例
  • 【Python】深入探索Python类型检查:掌握 `typing` 模块的高级用法
  • Android学习15--charger