【LeetCode: 剑指 Offer II 085. 生成匹配的括号 | 递归 | 回溯】

news2024/10/6 6:49:16

在这里插入图片描述

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🍎座右铭:人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯🎯

在这里插入图片描述

目录

    • 题目链接
    • 题目描述
    • 求解思路&实现代码&运行结果
      • 递归
        • 求解思路
        • 实现代码
        • 运行结果
    • 共勉

题目链接

剑指 Offer II 085. 生成匹配的括号
22. 括号生成

题目描述

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

示例 1:

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

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

提示:

1 <= n <= 8


求解思路&实现代码&运行结果

递归

求解思路

  1. 通过读题目的意思我们也可以知道该题通过递归来求解,那关键之处在于怎么设计这个递归呢?下面我就来一步一步的引导你如何设计递归。
  2. 首先,题目给定我们一个n,n代表的是题目共有多少对括号序列,也就是有多少个n个’(‘,和n个’)',那么我们就可以开辟一个char数组,从0位置开始,分别在满足题目要求的时候将当前的位置设置为左括号或者右括号。那么问题来了?什么时候是满足左括号的呢?什么时候又是满足右括号的呢?
  3. 我们先来看一下什么时候满足左括号?比较简单,我们在递归开始的时候传入一个n,代表当前左括号可以填充多少个,如果n是大于0的,那么我们可以直接收集。
  4. 分析完左括号后,我们再来看一下右括号?我们分类讨论一下,如果此时左括号的数量等于右括号的数量,此时我们是不能收集右括号的,因为此时是不符合要求的;那么我们再来判断,如果此时左括号的数量是大于右括号的数量的,同理,还是不符合要求的;那最后就剩一种情况了,就是左括号的数量是小于右括号的数量,此时我们可以去收集当前位置设置为右括号的答案。
  5. 通过上面的分析,那么这道题目我们就分析出来了,接下来我们来一起实现一下代码。

实现代码

实现代码的方式有很多,你可以在设计递归的时候将参数放到函数中,也可以将参数设置为成员变量都是可以的,甚至再求一些值的时候,你可以将最后的答案放到参数中,当然也可以将每一步的答案都进行返回,递归设置相应的返回值。方式有很多,大家选择自己最喜欢,最熟悉的方式即可。

class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans=new ArrayList<>();
        char[] arr=new char[2*n];
        process(0,2*n,n,n,arr,ans);
        return ans;
    }

    public void process(int index,int n,int leftCount,int rightCount,char[] arr,List<String> ans){
        if(index>=n){
            ans.add(new String(arr));
            return;
        }
        // 此时可以添加左括号
        if(leftCount>0){
            arr[index]='(';
            process(index+1,n,leftCount-1,rightCount,arr,ans);
        }
        // 此时可以添加右括号
        if(rightCount>leftCount){
            arr[index]=')';
            process(index+1,n,leftCount,rightCount-1,arr,ans);
        }
    }
}

运行结果

在这里插入图片描述


共勉

最后,我想送给大家一句一直激励我的座右铭,希望可以与大家共勉!
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

文本翻译免费软件-word免费翻译软件

好用的翻译文件软件应该具备以下几个方面的特点&#xff1a;支持多种文件格式&#xff0c;翻译结果准确可靠&#xff0c;界面操作简便易用&#xff0c;价格实惠&#xff0c;用户体验舒适。以下是几个好用的翻译文件软件&#xff1a; 1.147cgpt翻译软件 翻译软件特点&#xff1…

Diffusion Models 简单代码示例

一、关于Diffusion 模型的简单介绍 首先diffusion模型和VAE、Flow、Gan等模型类似&#xff0c;均属于生成模型&#xff0c;可以和GCN、CNN等其他深度学习网络相结合&#xff0c;完成特定的生成任务&#xff0c;如下图&#xff1a; 基于 GAN 生成模型&#xff0c;基于 VAE 的生成…

初识二叉树

树的概念与结构 树是一种非线性的数据结构&#xff0c;它是由n个有限结点组成一个具有层次关系的集合&#xff0c;把它叫做树是因为它看起来像一颗倒挂的树&#xff0c;也就是说它的根朝上&#xff0c;而叶朝下的。 子树之间不能有交集&#xff0c;否则就不是树型结构 比如下面…

3dmax间隔选择与循环选择你会用吗?真传干货来了!

文章目录一、循环选择1、AltL&#xff08;线性循环&#xff09;2、AltR&#xff08;环向循环&#xff09;3、在线选择上altR和altL的差别二、 间隔选1、选一隔一2、选二隔一3、选二隔二4、隔三选一5、面的间隔选择总结6、线的间隔选文章原出处&#xff1a; https://blog.csdn.n…

TCP拆包粘包问题

什么是粘包&#xff1f; 首先明确TCP时面向字节流的协议&#xff08;当用户消息通过 TCP 协议传输时&#xff0c;消息可能会被操作系统分组成多个的 TCP 报文&#xff0c;也就是一个完整的用户消息被拆分成多个 TCP 报文进行传输&#xff09;&#xff0c;UDP是面向报文的协议&…

【ChatGPT】AI发展如此火热,程序员的发展呢?

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录一、AI已来&#xff0c;ChatGPT你用上了吗&#x1f33e;二、AI之路&#xff0c;这是社会在发展&#x1f331;三、AI时代&#xff0c;程序员应该怎么做&#x1f334;一、AI已来&#xff0c;ChatGPT你用上了吗&…

【Python】基于ML307A的位置读取系统(通过UART串口实现AT指令和flask来实现自动化读取并推流)

【Python】基于ML307A的位置读取系统&#xff08;通过UART串口实现AT指令和flask来实现自动化读取并推流&#xff09; Python下的串口serial库 串行口的属性&#xff1a; name:设备名字 portstr:已废弃&#xff0c;用name代替 port&#xff1a;读或者写端口 baudrate&#xf…

CUDA效率优化之CUDA Graph的使用

CUDA系列文章 文章目录CUDA系列文章前言一、优化方案简单顺序调用二、Overlapping三、使用CUDA Graph总结前言 GPU 架构的性能随着每一代的更新而不断提高。 现代 GPU 每个操作&#xff08;如kernel运行或内存复制&#xff09;所花费的时间现在以微秒为单位。 但是&#xff0c…

【C++跬步积累】——时间复杂度

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;C跬步积累 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日一题 &#x1f7e1; 每日反刍 &#x1f7e2; 读书笔记 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称王&a…

马云回国,首谈ChatGPT

马云今天回国了&#xff0c;这是一个备受关注的消息。 作为中国最具代表性的企业家之一&#xff0c;马云在过去的二十多年里&#xff0c;带领阿里巴巴从一个小小的创业公司&#xff0c;发展成为全球最大的电商平台之一&#xff0c;同时也推动了中国互联网行业的发展。 他的回…

使用向量机(SVM)算法的推荐系统

系统整体结构 运行环境 包括Python环境、TensorFlow环境、安装模块、MySQL数据库。 Python环境 需要Python 3.6及以上配置&#xff0c;在Windows环境下推荐下载Anaconda完成Python所需的配置&#xff0c;下载地址为https://www.anaconda.com/&#xff0c;也可下载虚拟机在Li…

项目经理如何做好项目数据分析?

“周一到周五哪天更适合工作&#xff1f;” 周一困倦&#xff0c;周二认命&#xff0c;周三亢奋&#xff0c;周四疲惫&#xff0c;周五又像打了鸡血…… 项目经理&#xff1a;哪天都不适合工作&#xff0c;项目日报、周报、月报一个都少不了&#xff1b;不是在加班整理项目数…

Direct3D 12——灯光——镜面光照

反射的发生是根据一种名为菲涅耳效应(Fresnel effect,也译作菲涅 尔效应)的物理现象。当光线到达两种不同折射率(index of refraction )介质之间的界面时&#xff0c;一部分光将 被反射&#xff0c;而剩下的光则发生折射(refract),折射率是一种介质的物理性质&#xff0c;即 光…

Day939.如何小步安全地升级数据库框架 -系统重构实战

如何小步安全地升级数据库框架 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于如何小步安全地升级数据库框架的内容。 当消息组件的数据存储都是采用 SQL 拼写的方式来操作&#xff0c;这样不便于后续的扩展及维护。除此之外&#xff0c;相比前面的其他重构&#x…

线性代数 --- Gram-Schmidt, 格拉姆-施密特正交化(上)

在求解最小二乘的问题时&#xff0c;已经介绍了类似于Gram-Schmidt的一些想法。在这里要继续介绍这些想法&#xff0c;那就是如何“改写”矩阵A中的列向量&#xff0c;使得最小二乘解的计算越来越简单&#xff0c;甚至可以直接写出答案。 标准正交基(Orthonormal Bases) 上一篇…

3.1 多维度随机变量及其分布

思维导图&#xff1a; 学习目标&#xff1a; 要学习二维随机变量及联合分布&#xff0c;我会按照以下步骤进行&#xff1a; 了解基本概念&#xff1a;首先要了解二维随机变量的概念&#xff0c;即同时包含两个随机变量的变量。还要了解二维随机变量的取值范围以及联合概率密…

【CSS】定位 ④ ( 绝对定位特点 | 相对定位不脱标示例 | 绝对定位脱标示例 )

文章目录一、绝对定位特点二、相对定位不脱标示例三、绝对定位脱标示例一、绝对定位特点 绝对定位 以 带有定位的 父级元素 为基准 , 通过 边偏移 移动位置 ; 如果 绝对定位 的元素 的 父级元素 没有定位 , 那么会 一直向上查找有定位的父级元素 , 直到浏览器 ; 绝对定位 元素…

【Linux】组管理和权限管理

目录1 Linux组的基本介绍2 文件/目录所有者2.1 查看文件的所有者2.2 修改文件所有者3 组的创建3.1 基本指令3.2 应用实例4 文件/目录 所在组4.1 查看文件/目录所在组4.2修改文件/目录所在的组5 其他组6 改变用户所在组6.1 改变用户所在的组6.2 应用实例7 权限介绍8 rwx权限详解…

多线程(八):常见锁策略

目录 前言 1. 乐观锁 VS 悲观锁 乐观锁 悲观锁 2. 轻量级锁 VS 重量级锁 轻量级锁 3. 自旋锁 VS 挂起等待锁 自旋锁 挂起等待锁 4. 读写锁 VS 互斥锁 5. 可重入锁 vs 不可重入锁 死锁 发生死锁的情况 死锁产生的四个必要条件如下&#xff1a; 6. 公平锁和非公平锁…

Hibernate多表关联——(一对多关系)

Hibernate多表关联——&#xff08;一对多关系&#xff09; 文章目录Hibernate多表关联——&#xff08;一对多关系&#xff09;1.分别在类中添加属性&#xff1a;2.hibernate建表3.使用测试类在表中添加数据hibernate是连接数据库使得更容易操作数据库数据的一个框架&#xff…