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

Java中等题-括号生成(力扣)

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

这道题我没有思路,我直接看的力扣官方的解题思路

回溯法

class Solution {public List<String> generateParenthesis(int n) {List<String> ans=new ArrayList<>();StringBuilder str=new StringBuilder();int start=0;int end=0;generateTree(ans,str,start,end,n);return ans;}public static void generateTree(List<String> ans,StringBuilder str,int start,int end,int n){if (str.length()==n*2) {ans.add(String.valueOf(str));return;}if(start<n){str.append('(');generateTree(ans,str,start+1,end,n);str.deleteCharAt(str.length()-1);}if(end<start){str.append(')');generateTree(ans,str,start,end+1,n);str.deleteCharAt(str.length()-1);}}
}

让AI来为我们详细解释一下:

class Solution {  // 公开方法,用于生成所有可能的括号组合  public List<String> generateParenthesis(int n) {  List<String> ans = new ArrayList<>(); StringBuilder str = new StringBuilder(); // 创建一个StringBuilder对象,用于构建当前的括号组合  // 通常我们会用两个计数器来跟踪左括号和右括号的数量   generateTree(ans, str, 0, 0, n); // 调用递归方法开始生成括号组合,start和end初始都为0  return ans; // 返回包含所有括号组合的列表  }  // 静态递归方法,用于生成括号组合  // ans: 存储所有有效组合的列表  // str: 当前正在构建的括号组合  // start: 表示已添加的左括号数量  // end: 表示已添加的右括号数量  // n: 需要生成的括号对数  public static void generateTree(List<String> ans, StringBuilder str, int start, int end, int n) {  if (str.length() == n * 2) { // 如果当前组合的长度等于2n,说明已经生成了一个完整的括号组合  ans.add(String.valueOf(str));  return;  }  if (start < n) { // 如果还可以添加左括号(即已添加的左括号数量小于n)  str.append('('); // 向当前组合中添加一个左括号  generateTree(ans, str, start + 1, end, n); // 递归调用,尝试添加下一个字符str.deleteCharAt(str.length() - 1); // 回溯,撤销上一步添加的左括号  }  if (end < start) { // 如果还可以添加右括号(即已添加的右括号数量小于已添加的左括号数量)  str.append(')'); // 向当前组合中添加一个右括号  generateTree(ans, str, start, end + 1, n); // 递归调用,尝试添加下一个字符str.deleteCharAt(str.length() - 1); // 回溯,撤销上一步添加的右括号  }  }  
}  

第一个 if 循环(添加左括号)

当 open < max 时,算法会尝试添加一个左括号到当前的括号组合中(cur.append('(');)。然后,它递归地调用自己(backtrack(...)),在添加了左括号的基础上继续生成括号组合。递归调用返回后,算法需要撤销刚才添加的左括号,以便在当前的 open 计数下尝试添加右括号或其他可能的操作。这就是 cur.deleteCharAt(cur.length() - 1); 在第一个 if 循环之后的作用。

第二个 if 循环(添加右括号)

当 close < open 时,算法会尝试添加一个右括号到当前的括号组合中(cur.append(')');)。与添加左括号的情况类似,它也递归地调用自己,在添加了右括号的基础上继续生成括号组合。递归调用返回后,同样需要撤销刚才添加的右括号,以便在当前的状态下尝试其他可能的操作(比如继续添加右括号,或者在添加更多左括号之后再次尝试添加右括号)。因此,cur.deleteCharAt(cur.length() - 1); 也被用在了第二个 if 循环之后。

总结

cur.deleteCharAt(cur.length() - 1); 的使用是回溯算法的一个典型特征。它允许算法在尝试了一条路径之后,能够撤销上一步的操作,并回到之前的状态,以便尝试其他可能的路径。在生成括号组合的问题中,这确保了算法能够系统地探索所有可能的括号组合,而不会陷入无限循环或错过任何有效的组合。

相关文章:

Java中等题-括号生成(力扣)

数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()","()(())","()()(…...

Flink 实时数仓(八)【DWS 层搭建(二)流量域、用户域、交易域搭建】

前言 今天的任务是完成流量域最后一个需求、用户域的两个需求以及交易域的部分需求&#xff1b; 1、流量域页面浏览各窗口汇总表 任务&#xff1a;从 Kafka 页面日志主题读取数据&#xff0c;统计当日的首页和商品详情页独立访客数。 注意&#xff1a;一般我们谈到访客&…...

gitlab-runner /var/run/docker.sock connect permission denied

usermod -aG docker gitlab-runner sudo service docker restart参考&#xff1a;https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3492...

网络安全 - 应急响应检查表

前言 本项目旨在为应急响应提供全方位辅助&#xff0c;以便快速解决问题。结合自身经验和网络资料&#xff0c;形成检查清单&#xff0c;期待大家提供更多技巧&#xff0c;共同完善本项目。愿大家在应急之路一帆风顺。 图片皆来源于网络&#xff0c;如有侵权请联系删除。 一…...

AD常用PCB设计规则介绍 (详细版)

AD09常用PCB设计规则介绍 电气设计规则用来设置在电路板布线过程中所遵循的电气方面的规则&#xff0c;包括安全间距、短路、未布线网络和未连接引脚这四个方面的规则&#xff1a; &#xff08;1&#xff09;、安全间距规则(clearance) 该规则用于设定在PCB设计中&#xff0…...

mysql主从服务配置

主从MySQL服务器 [rootlocalhost ~]# yum -y install ntpdate [rootlocalhost ~]# ntpdate cn.ntp.org.cn [rootlocalhost ~]# yum -y install rsync [rootlocalhost ~]# vim mysql.sh #!/bin/bash yum list installed |grep libaio if [ $? ne 0 ]; then yum -y install…...

Redis基础总结、持久化、主从复制、哨兵模式、内存淘汰策略、缓存

文章目录 Redis 基础Redis 是什么&#xff0c;有哪些特点为什么要使用 Redis 而不仅仅依赖 MySQLRedis 是单线程吗Redis 单线程为什么还这么快 Redis 数据类型和数据结构五种基本数据结构及应用场景其他数据类型Redis 底层数据结构 Redis 持久化数据不丢失的实现AOF 日志RDB 快…...

Java与Python优劣势对比:具体例子与深入分析

在软件开发的世界里&#xff0c;Java和Python是两座不可忽视的高峰。它们各自拥有独特的优势和应用场景&#xff0c;为开发者提供了多样化的选择。本文将通过具体例子&#xff0c;深入分析Java和Python在不同方面的表现&#xff0c;以期为读者提供更为详尽的参考。 1. 语法简洁…...

C++内存泄漏介绍

C内存泄漏&#xff08;Memory Leak&#xff09;是指程序在运行过程中&#xff0c;动态分配的内存没有被适当地释放或回收&#xff0c;导致这部分内存始终被占用&#xff0c;无法再被程序或其他程序使用。这种情况通常发生在使用了new或malloc等函数动态分配内存后&#xff0c;忘…...

C++分析红黑树

目录 红黑树介绍 红黑树的性质与平衡控制关系 红黑树节点的插入 情况1&#xff1a;不需要调整 情况2&#xff1a;uncle节点为红色 情况3&#xff1a;uncle节点为黑色 总结与代码实现 红黑树的删除&#xff08;待实现&#xff09; 红黑树的效率 红黑树介绍 红黑树是第二种平衡二…...

mysql线上查询之前要性能调优

查询优化是数据库性能调优的关键方面&#xff0c;目的是减少查询的执行时间和资源消耗。以下是一些常见的查询优化技巧及其示例&#xff1a; 使用合适的索引 问题&#xff1a; 全表扫描导致查询缓慢优化&#xff1a; 为经常用于搜索条件的列添加索引示例&#xff1a; 假设有一…...

GPIO输出控制之LED闪烁、LED流水灯以及蜂鸣器应用案例

系列文章目录 STM32之GPIO&#xff08;General Purpose Input/Output&#xff0c;通用型输入输出&#xff09; 文章目录 系列文章目录前言一、LED和蜂鸣器简介1.1 LED1.2 蜂鸣器1.3 面包板 二、LED硬件电路2.1 低电平驱动电路2.2 高电平驱动电路 三、蜂鸣器硬件电路3.1 PNP型三…...

体系结构论文导读(三十四):Design of Reliable DNN Accelerator with Un-reliable ReRAM

文章核心 这篇文章主要讨论了一种在不可靠的ReRAM&#xff08;阻变存储器&#xff09;设备上设计可靠的深度神经网络&#xff08;DNN&#xff09;加速器的方法。文章提出了两种关键技术来解决ReRAM固有的不可靠性问题&#xff1a;动态定点&#xff08;DFP&#xff09;数据表示…...

WebStock会话

其实使用消息队列也可以实现会话&#xff0c;直接前端监听指定的队列&#xff0c;使用rabbitmq的分组还可以实现不同群聊的效果。 1、依赖搭建&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org…...

5_现有网络模型的使用

教程&#xff1a;现有网络模型的使用及修改_哔哩哔哩_bilibili 官方网址&#xff1a;https://pytorch.org/vision/stable/models.html#classification 初识网络模型 pytorch为我们提供了许多已经构造好的网络模型&#xff0c;我们只要将它们加载进来&#xff0c;就可以直接使…...

软件安全测试报告内容和作用简析,软件测试服务供应商推荐

在数字化时代&#xff0c;软件安全问题愈发凸显&#xff0c;安全测试显得尤为重要。软件安全测试报告是对软件系统在安全性方面进行评估和分析后的书面文件。该报告通常包含测试过程、测试发现、漏洞描述、风险评估及改进建议等重要信息。报告的目的是为了帮助开发团队及时发现…...

算法板子:树形DP、树的DFS——树的重心

思想&#xff1a; 代码&#xff1a; #include <iostream> #include <cstring> using namespace std;const int N 1e5 10;// vis标记当前节点是否被访问过; vis[1]true代表编号为1的节点被访问过 bool vis[N]; // h数组为邻接表; h数组上的每个坑位都串了一个单链…...

在C语言中,联合体或共用体(union )是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。

在C语言中&#xff0c;union 是一种特殊的数据类型&#xff0c;允许在相同的内存位置存储不同的数据类型。这意味着 union 中的所有成员共享同一块内存空间&#xff0c;因此它们之间会相互覆盖。在你给出的 Acceleration_type union 定义中&#xff0c;包含了三种不同类型的成员…...

MS2201以太网收发电路

MS2201 是吉比特以太网收发器电路&#xff0c;可以实现超高速度的 全双工数据传输。它的通信遵从 IEEE 802.3 Gigabit Ethernet 协议 中的 10 比特接口的时序要求协议。 MS2201 支持数据传输速率从 1Gbps 到 1.85Gbps 。 主要特点 ◼ 电源电压&#xff1a; 2.5V 、 3.3V …...

乐乐音乐Kotlin版

简介 乐乐音乐Kotlin版&#xff0c;主要是基于ExoPlayer框架开发的Android音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词、trc歌词、zrce歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 编译环境 Android Studio Jellyfish | …...

SensitivityMatcher:终极免费鼠标灵敏度跨游戏转换工具

SensitivityMatcher&#xff1a;终极免费鼠标灵敏度跨游戏转换工具 【免费下载链接】SensitivityMatcher Script that can be used to convert your mouse sensitivity between different 3D games. 项目地址: https://gitcode.com/gh_mirrors/se/SensitivityMatcher 还…...

龙芯k - 走马观碑组VLLX驱动移植汕

一、什么是urllib3&#xff1f; urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你&#xff1a; 发送各种 HTTP 请求&#xff08;GET, POST, PUT, DELETE等&#xff09;。 管理连接池&#xff0c;提高网络请求效率。 处理重试和重定向。 支…...

为什么你的AI模型API文档总比代码慢3.2个迭代?揭秘头部AIGC公司正在封测的文档-代码双向绑定协议(RFC-AIDoc v0.9草案首曝)

第一章&#xff1a;AI原生软件研发自动化文档更新机制 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发范式正推动文档生命周期从“人工维护”跃迁至“语义驱动的实时同步”。其核心在于将代码、测试、API契约与自然语言描述统一建模为可推理的知识图谱&#xff…...

3步轻松备份QQ空间回忆:GetQzonehistory让青春记忆永不丢失

3步轻松备份QQ空间回忆&#xff1a;GetQzonehistory让青春记忆永不丢失 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间里的青春记忆会随着时间流逝而消失&#xff1…...

C#实现S7系列PLC上位机通信系统开发——使用VS2017进行数据读写、寄存器操控与IO通信助手

C#编写西门子S7系列PLC上位机通信&#xff0c;ⅤS2017编写&#xff0c;涵盖读写寄存器&#xff0c;中间继电器&#xff0c;外部IO读写。 数据采集好帮手。 无密码&#xff0c;无使用时间限制。一、系统概述 西门子S7系列PLC C#上位机通信系统是基于Visual Studio 2017开发环境&…...

告别代码恐惧:用自然语言让AI成为你的全平台操作助手

告别代码恐惧&#xff1a;用自然语言让AI成为你的全平台操作助手 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为复杂的自动化脚本而头疼吗&#xff1f;想…...

别再只把Obsidian当笔记软件了!用DeepSeek R1和Copilot插件,打造你的AI驱动第二大脑

从静态笔记到智能伙伴&#xff1a;用DeepSeek R1重构Obsidian的认知边界 当大多数人还在用Obsidian记录会议纪要或整理读书笔记时&#xff0c;一群先锋用户已经将它改造成了会主动思考的"数字大脑"。想象一下&#xff1a;清晨打开笔记软件&#xff0c;AI助手不仅整理…...

如何用GraphvizOnline在5分钟内创建专业流程图:终极免费可视化工具指南

如何用GraphvizOnline在5分钟内创建专业流程图&#xff1a;终极免费可视化工具指南 【免费下载链接】GraphvizOnline Lets Graphviz it online 项目地址: https://gitcode.com/gh_mirrors/gr/GraphvizOnline 还在为复杂的图表绘制工具而烦恼吗&#xff1f;GraphvizOnlin…...

5个必学技巧:用EldenRingFPSUnlockAndMore彻底解锁《艾尔登法环》体验

5个必学技巧&#xff1a;用EldenRingFPSUnlockAndMore彻底解锁《艾尔登法环》体验 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh…...

Golang如何做Helm Chart_Golang Helm教程【秒懂】

Go二进制在scratch/alpine镜像报“no such file or directory”是因CGO默认启用导致动态链接libc&#xff0c;需禁用CGO并静态编译&#xff1b;Helm配置须统一管理探针路径、环境变量、镜像tag等四端一致。Go二进制进镜像总报 no such file or directory&#xff1f;不是镜像没…...