[Java·算法·中等]LeetCode22. 括号生成
每天一题,防止痴呆
- 题目
- 示例
- 分析思路1
- 题解1
- 分析思路2
- 题解2
- 分析思路3
- 题解3
👉️ 力扣原文
题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
输入:n = 1
输出:["()"]
分析思路1
递归和回溯的方法:
- 定义一个函数来生成括号,该函数需要接收三个参数:剩余左括号数量、剩余右括号数量、当前生成的括号字符串。
- 如果剩余左括号数量和剩余右括号数量都为0,则说明已经生成了一个完整的括号字符串,将其加入结果集。
- 如果剩余左括号数量大于0,则可以在当前括号字符串后面添加一个左括号,并递归调用函数。
- 如果剩余右括号数量大于剩余左括号数量,则可以在当前括号字符串后面添加一个右括号,并递归调用函数。
题解1
class Solution {public List<String> generateParenthesis(int n) {List<String> res = new ArrayList<>();gen(n , n , "", res);return res;}private void gen(int left, int right, String str, List<String> res){if(left == 0 && right == 0){res.add(str);return;}if(left > 0){gen(left - 1,right, str+"(", res );}if(right > left){gen(left, right - 1, str+")", res);}}}
执行结果

分析思路2
另一种递归的思路,效率不是很高。
- 当n=1时,只有一种合法的括号组合"()"。
- 当n>1时,可以在n-1对括号的基础上,将"()"插入到每一对括号中间,得到n对括号的所有合法组合。
- 为了避免重复,使用HashSet来存储所有的括号组合。
- 最后将HashSet转换成ArrayList并返回即可。
题解2
class Solution {public static List<String> generateParenthesis(int n){if (n == 1){return Arrays.asList("()");}HashSet<String> set = new HashSet<>();for (String str : generateParenthesis(n - 1)){for (int i = 0; i <= str.length()/2; i++) {set.add(str.substring(0,i) + "()" + str.substring(i,str.length()));}}return new ArrayList<>(set);}}
执行结果

分析思路3
动态规划
- 定义一个dp数组,其中dp[i]表示i对括号的所有合法组合。
- 初始化dp[0]为"",表示0对括号时只有一种合法组合。
- 对于每个i,遍历j从0到i-1,将dp[j]和dp[i-j-1]拼接在一起,组成新的括号组合。
- 在拼接时,需要保证左括号数量等于右括号数量,否则组合是不合法的。
- 最后返回dp[n]即可。
题解3
class Solution {public static List<String> generateParenthesis(int n) {List<String>[] dp = new List[n + 1];dp[0] = Arrays.asList("");for (int i = 1; i <= n; i++) {dp[i] = new ArrayList<>();for (int j = 0; j < i; j++) {for (String left : dp[j]) {for (String right : dp[i - j - 1]) {dp[i].add("(" + left + ")" + right);}}}}return dp[n];}}
执行结果

相关文章:
[Java·算法·中等]LeetCode22. 括号生成
每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2分析思路3题解3👉️ 力扣原文 题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 输入:n 3 输出&…...
Git项目合并实践
Git项目合并实践 一、前言 环境 操作系统:Windows 10 专业版 代码托管平台:Gitee 场景 同一个项目,在某一个时间点,被另外一个团队拷贝和修改,并且代码不在同一个仓库,最后需要合并项目 不是同一个项…...
C++实战md5、base64算法实现(附源码)
C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、常用加密算法1. md5是什么二、源码1. md52. base64、decode总结前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务…...
P6专题:P6 EPPM和PPM基本概念
目录 引言 Oracles Primavera P6 Enterprise Project Portfolio Management(P6 EPPM) Oracles Primavera P6 Professional Project Management 引言 Oracle Primavera系列软件专注于项目密集型企业,其整个项目生命周期内所有项目的组合管…...
【为什么事务@Transactional会失效】
在Spring框架中,Transactional注解用于声明一个方法需要被包含在事务中,以确保数据库操作的一致性和完整性。Transactional注解通常用于Service层或DAO层的方法上。 Transactional注解失效可能是由以下原因引起的: 注解未被正确声明或配置&a…...
NLP中的对话机器人——模型的评估
引言 本文是七月在线《NLP中的对话机器人》的视频笔记,主要介绍FAQ问答型聊天机器人的实现。 模型的评估 我们如何评估模型的好坏?由于我们的数据集没有提供测试数据,所以我们很难评估模型的好 坏。如果我们要做非常严谨的评估,…...
数据挖掘知识规整与心得体会
一.大数据的特点: 数据多,类型多,更新快,更新内容多。 二.分类(classification)与混淆矩阵(confusion matrix) 这里的分类说的是二分类问题,比如说把人分为好人和坏人&a…...
修正一些formdesigner的一些bug与操作
之前集成了formdesigner表单设计器,但还是有些问题,所以进行一些bug修复与功能修正 一、之前组件布局的图标不见了 在main.js里增加下面一行 import /components/formdesigner/assets/iconfont/iconfont.js 效果如下: 二、选择列表没有数…...
前端网络安全
什么是同源策略同源指的是:协议、端口号、域名必须一致。他是浏览器的一个用于隔离潜在恶意文件的重要安全机制。限制了从同一个源加载的文档或脚本,与另一个源的资源进行交互。同源策略主要限制了三个方面:当前域下的js脚本不能够访问其他域…...
docker内存统计
在docker里top和在docker外top看内存都是没有变化的,但是用docker stats看mem uasge就一直在涨top命令和docker stats命令采集内存使用的方式不同所致。top命令采集的是当前进程的内存使用情况,而docker stats命令采集的是整个Docker容器的内存使用情况。…...
【IDEA】IDEA使用有道翻译引擎—详细配置步骤
目录 前言 步骤一:下载翻译工具Translate 步骤二:注册登录有道云平台 步骤三:配置有道翻译 前言 2022年10月 谷歌翻译已经不在中国了,所以IDEA配置谷歌翻译会出错。 步骤一:下载翻译工具Translate 打开idea设置set…...
js求解《初级算法》56.最长公共前缀
一、题目描述 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 输入:strs ["flower","flow","flight"] 输出:"fl" 输入:strs ["…...
嵌入式Linux(二十四)系统烧写
将uboot,linux kernel,.dtb,rootfs烧写到板子上的EMMC上,避免断网导致不能运行。 1. MfgTool工具介绍 一路解压之后,得到以下两项: ①Profiles文件夹:后续烧写文件放到这个文件夹。 其中关注…...
【ECNU】3496. 贪吃的 xjj 和贪心的 oxx(C++)
目录 题目 输入格式 输出格式 样例 提示 思路 代码 题目 单点时限: 2.0 sec 内存限制: 256 MB oxx 与 xjj 终于到了 Xiamen,他们第一件事就是去吃当地著名的特产椰子饼。 他们共买了 n 盒礼盒,第 i 盒含 ai 块椰子饼。oxx 与 xjj 约定让 oxx …...
【iOS】设置背景渐变色
drawRect函数 主要负责iOS的绘图操作,程序会自动调用此方法进行绘图。我在这个函数中绘制渐变背景色。 方法定义: -(void)drawRect:(CGRect)rect; 重写此方法,执行重绘任务-(void)setNeedsDisplay; 标记为需要重绘,异步调用dra…...
Scrapy框架(高效爬虫)
文章目录一、环境配置二、创建项目三、scrapy数据解析四、基于终端指令的持久化存储1、基于终端指令2、基于管道3、数据同时保存至本地及数据库4、基于spider爬取某网站各页面数据5、爬取本页和详情页信息(请求传参)6、图片数据爬取ImagesPipeline五、中…...
程序设计语言-软件设计(二十一)
数据结构与算法(二十)快速排序、堆排序(四)https://blog.csdn.net/ke1ying/article/details/129269655 这篇主要讲的是 编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多种程序语言特点。 编译的过程 解释型 和 编译型 编译型过程&#…...
【小破站下载工具】Python tkinter 实现网站下载工具,所有数据一键获取
目录前言开发环境本次项目案例步骤先展示下完成品的效果界面导入模块先创建个窗口功能按键主要功能代码编写功能一功能二功能三前言 最近很多同学想问我,怎么把几个代码的功能集合到一起? 很简单,写一个界面就行了,想要哪个代码…...
C51---IO口状态翻转
1.example #include "reg52.h" #include "intrins.h" //main.c(11): error C264: intrinsic _nop_: declaration/activation error,?????????? sbit led1 P3^7;//????,??????? sbit key1 P2^1; sbit key2 P2^0; void Delay50ms()…...
2023年春【移动计算技术】文献精读(一)-1 ||| 附:【Markdow语法】向上取整 向下取整。
沉默着走了有 // 多遥远 // 抬起头 // 蓦然间 // 才发现 // 一直倒退 // 倒退到原点 // 倔强坚持 // 对抗时间 “在光芒万丈之前,我们都要欣然接受眼下的难堪和不易,接受一个人的孤独和偶然无助,认真做好眼前的每件事,你想要的都会有。”——毕淑敏 🎯作者主页:追光者♂…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
联邦学习带宽资源分配
带宽资源分配是指在网络中如何合理分配有限的带宽资源,以满足各个通信任务和用户的需求,尤其是在多用户共享带宽的情况下,如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源,通常指的是单位时间…...
