括号生成(力扣)递归 JAVA

news2024/12/24 0:24:54

目录

  • 题目描述:
  • 纯递归解法:
  • 递归 + 回溯:

题目描述:

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

示例 1:

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

示例 2:

输入:n = 1
输出:[“()”]


纯递归解法:

思路:

1. n对括号,每个括号由左右两个部分组成,那么转换一下就是由2n个部分组成

2.用暴力递归用左右括号将长度为2n的数组填满

3.检验生成的括号序列是否满足要求

左括号则加一,右括号则减一,若小于0则说明括号不匹配(即右括号,左括号),最后结果不为0说明结果也不匹配。

理论成立代码如下:

class Solution {
    public List<String> generateParenthesis(int n) {
           List final_result = new ArrayList<String>();
           get(new char [2*n], 0, final_result);
           return final_result;
    }
    
    public static void get(char a[], int index, List<String> result) {
    	if(index == a.length) {	
    		if(check(a)) result.add(new String(a));//重新粘贴一个a
    	}
    	else {
    	     a[index] = '(';
    	     get(a, index + 1, result);
    	     a[index] = ')';
    	     get(a, index + 1, result);
    	}
    }
    
    public static boolean check(char a[]) {
    	int balance = 0;
    	for(char b : a) {
    		if(b == '(') balance ++;
    		else balance --;
    		if(balance < 0) return false;
    	}
    	
    	return balance == 0;
    }
}

注意: 储存正确序列时一定要重新创建一个对象变量,因为list是指向型的。

在这里插入图片描述


递归 + 回溯:

对传入的左括号没有限制,右括号必须数量在小于左括号的前提下,试探添加。进而剪掉一些不符合要求的生成序列

代码:

class Solution {
    public List<String> generateParenthesis(int n) {
    	List final_result = new ArrayList<String>();
    	get(n, n,new String(), final_result);
    	return final_result;
    }
    
    public static void get(int l, int r, String s, List<String> result) {
    	if(l == 0 && r == 0) {
    	  result.add(s);
    	}
        if(l > 0) {
        	String s2 = new String(s);
        	get(l - 1, r, s + "(", result);
        }
        
        if(r > l) {
        	get(l, r - 1, s + ")", result);
        }
    }
}

在这里插入图片描述

注意由于String在传入函数时,会生成另一个新副本,所以在当次函数中未被修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)

1.环境搭建 基于python3和selenium3做自动化测试&#xff0c;俗话说&#xff1a;工欲善其事必先利其器&#xff1b;没有金刚钻就不揽那瓷器活&#xff0c;磨刀不误砍柴工&#xff0c;因此你必须会搭建基本的开发环境&#xff0c;掌握python基本的语法和一个IDE来进行开发&…

modelscope魔塔初探--TTS

官网 step1 可以选择指定模型&#xff0c;对于多情感的模型&#xff0c;还可以通过标签实现语气情感 from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Taskstext <speak><emotion …

Springboot实现热部署

目录 1、问题阐述 2、实现方式 3、开始配置 3.1在pom.xml中添加依赖 3.2devtools配置 3.3修改IDEA配置 3.4测试一下 1、问题阐述 在实际项目开发过程中&#xff0c;每次修改代码就得将项目重启&#xff0c;重新部署&#xff0c;对于一些大型应用来说&#xff0c;重启时…

特征选择算法 | Matlab实现基于ReliefF特征选择算法的回归数据特征选择 ReliefF

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 特征选择算法 | Matlab实现基于ReliefF特征选择算法的回归数据特征选择 ReliefF 部分源码 %--------------------

五分钟就可以安装MySQL

目录 ⛈️一.什么是MySQL ⛈️二.为什么要使用MySQL ⛈️三.MySQL有什么优点 ⛈️四.官网&#xff1a; ⛈️五.下载 ⛈️六.安装 ⛈️七.查看 ⛈️八.修改密码 一.什么是MySQL MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用结…

【Python编程系列】1、Python安装

Python安装 1、下载安装包 官网地址:https://www.python.org/ 进入后,在Downloads菜单下选择python运行的系统环境: 以Windows系统为例,进入后,选择合适的版本下载: 2、安装Python软件包 双击可执行文件exe: 弹出安装窗口后: 我们一般选择"Install Now"的…

Linux 配置dns覆盖默认127.0.0.53

Linux dns默认127.0.0.53&#xff0c;在/etc/resolve.conf中存在 nameserver 127.0.0.53&#xff0c;手动修改无果&#xff0c;每次重启依旧127.0.0.53&#xff0c;因为这是系统生成的文件&#xff0c;resolvectl命令来查dns的配置。 要修改dns&#xff0c;先暂停dns服务&…

6 JSR303校验

6.1 加入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 6.2 在实体类上加注解 在实体类上加入Validated注解。并且在属性上方加入Emall(messag…

Selenium自动化测试技巧

目录 前言&#xff1a; Selenium自动化 跨浏览器测试中的Selenium 利用正确的定位器 数据驱动的测试 不要依赖特定的驱动程序 选择器顺序 使用PageObjects设计模式 提倡wait避免sleep 关闭Firebug起始页 前言&#xff1a; Selenium是一个广泛使用的自动化测试框架&a…

Android11 Settings加载流程

一、系统设置首页(一级菜单)&#xff1a; 1、Settings 之所以要在此定义空的Activity&#xff0c;是为了外部应用能直接跳转到XX_SettingsActivity界面&#xff0c;因为如果只是fragment的话&#xff0c;外部是没法跳转到fragment界面的&#xff0c;跳转到XX_SettingsActivit…

【无公网IP】在外Windows远程连接MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自cpolar极点云文章&#xff1a;公网远程…

Camera API1 使用说明

Camera API2 使用说明 目录 一、开启相机 1.1创建项目 1.2注册权限 1.3配置相机特性要求 1.4 获取摄像头的个数 1.5 根据 ID 获取 CameraInfo facing 1.6 开启相机 1.7 关闭相机 二、预览 2.1认识 Parameters 2.2 设置预览尺寸 2.3添加预览 Surface 2.4 开启和关…

高级篇九、性能分析工具的使用

目录 2、查看系统性能参数3、统计SQL的查询成本&#xff1a;last_query_cost4、 定位执行慢的 SQL&#xff1a;慢查询日志4.1 开启慢查询日志参数4.2 查看慢查询数目4.3 案例演示 2、查看系统性能参数 在MySQL中&#xff0c;可以使用 SHOW STATUS 语句查询一些MySQL数据库服务…

【C++】STL——list介绍及使用

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f681; 个人主页&#xff1a;不 良 &#x1f525; 系列专栏&#xff1a;&#x1f6f8;C &#x1f6f9;Linux &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff0…

安装Anaconda

一、Anaconda简介 Anaconda&#xff0c;一个开源的Python发行版本&#xff0c;可用于管理Python及其相关包&#xff0c;包含了conda、Python等180多个科学包及其依赖项。当我们需要不同的Pytorch版本的时候&#xff0c;不需要卸载重新安装&#xff0c;可以通过Anaconda创建不同…

短视频抖音账号矩阵系统源码---功能架构示例1

一、短视频账号矩阵系统源码开发服务器集群化处理开发成本更低&#xff08;前提&#xff09; 什么是集群化处理视频内存内耗&#xff1f;集群化处理视频内存内耗是指通过建立集群系统&#xff0c;将视频处理任务分配给多个计算节点进行并行处理&#xff0c;以减少单个计算节点…

氨基酸中间体35309-53-6,cyclo(Asp-Asp),CYCLO(-天冬氨酸-ASP)

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ 试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; cyclo(Asp-Asp)&#xff0c;35309-53-6&#xff0c;一种氨基酸中间体&…

平衡搜索二叉树——AVL树

AVL树 1. AVL树的概念2. AVL树节点的定义3. AVL树的插入思路4. AVL树的平衡调整思路平衡因子更新思路LL型——右单旋RR型——左单旋LR型——左右旋RL型——右左旋 5. AVL树插入判断平衡调整类型6. AVL树插入的代码实现7. AVL树总结8. AVL树的验证9. AVL树的性能 1. AVL树的概念…

600多个人工智能AI工具汇总(AIGC时代-超级个体的崛起),免费提供和介绍(第一讲)

这里是600多个人工智能AI工具汇总第一讲&#xff0c;每天介绍5个&#xff0c;主要是我写不完教程了&#xff0c;你懂的&#xff0c;视频最后会告诉大家获取方式的。现在请大家同我一起进入AIGC的世界。 第一个&#xff1a;《AIGC时代&#xff1a;超级个体的崛起》用来介绍AIGC…

【AI绘画】用魔法打败魔法,用ChatGPT生成绘画

随着人工智能技术的不断发展&#xff0c;我们可以利用ChatAI这款大语言模型来辅助我们在绘画过程中获得更多创意和灵感。 一、了解AI绘画功能 它可以快速、自动、准确地从大量原始数据中生成新内容&#xff0c;大大提高了内容创作效率&#xff0c;AI绘画使用机器学习算法&…