【LeetCode-中等题】22. 括号生成

文章目录

    • 题目
    • 方法一:递归:
    • 方法二:递归+回溯

题目

在这里插入图片描述

方法一:递归:

  1. 递归入口 空子结果集,左括号数目(初始为0),右括号数目(初始为0)

  2. 递归出口
    若左括号 大于n 或者 左括号数量大于右括号数量 不符合题目要求 结束递归剪枝

    若 左括号数目 和 右括号数目都等于n 说明符合条件 结束递归

  3. 递归方向
    dfsback(zre+‘(’,leftsum+1,rightsum);//左括号递归
    dfsback(zre+‘)’,leftsum,rightsum+1);//右括号递归

class Solution {List<String> res = new ArrayList<>(); // 结果集int n = 0;public List<String> generateParenthesis(int n) {this.n = n;String zre = "";//子结果集dfsback(zre,0,0);return res;}public void dfsback(String zre,int leftsum,int rightsum){// n=3// leftsum > n((((  不满足     leftsum < rightsum ((  )))不满足if(leftsum > n  || leftsum < rightsum ) return;  //若左括号 大于n  或者 左括号数量大于右括号数量  不符合题目要求 结束递归剪枝if(leftsum == n && rightsum == n ){//若 左括号数目 和 右括号数目都等于n 说明符合条件  结束递归res.add(zre);return;}dfsback(zre+'(',leftsum+1,rightsum);//左括号递归dfsback(zre+')',leftsum,rightsum+1);//右括号递归}
}

或者下面在递归过程中根据条件去递归,符合括号生成条件才递归

// 全递归  根据括号数目在递归过程中剪枝List<String> res = new ArrayList<>(); // 结果集int n = 0;public List<String> generateParenthesis(int n) {this.n = n;String zre = "";//子结果集dfsback(zre,0,0);return res;}public void dfsback(String zre,int leftsum,int rightsum){if(leftsum == n && rightsum == n) {  //左右括号都达到了n  结束递归res.add(zre);return;}if(leftsum > n  || leftsum < rightsum ) return;//若左括号 大于n  或者 左括号数量大于右括号数量  不符合题目要求 结束递归剪枝if(leftsum == rightsum)  dfsback(zre+'(',leftsum+1,rightsum); //在左括号右括号相等的情况下 只能添加左括号if(leftsum > rightsum) {//在左括号大于右括号的情况下 两种括号都能添加dfsback(zre+'(',leftsum+1,rightsum);//左括号递归dfsback(zre+')',leftsum,rightsum+1);//右括号递归}}

参考视频:括号生成

方法二:递归+回溯

// 递归+回溯List<String> res = new ArrayList<>(); // 结果集int n = 0;public List<String> generateParenthesis(int n) {StringBuffer str = new StringBuffer();this.n = n;// String zre = "";//子结果集dfsback(str,0,0);return res;}public void dfsback(StringBuffer zre,int leftsum,int rightsum){if(leftsum == n && rightsum == n) {  //左右括号都达到了n  结束递归res.add(zre.toString());return;}if(leftsum > n  || leftsum < rightsum ) return;//若左括号 大于n  或者 左括号数量大于右括号数量  不符合题目要求 结束递归剪枝zre.append('(');dfsback(zre,leftsum+1,rightsum);//左括号递归zre.deleteCharAt(zre.length()-1);//回溯zre.append(')');dfsback(zre,leftsum,rightsum+1);//右括号递归zre.deleteCharAt(zre.length()-1);//回溯}

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

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

相关文章

linux(centos7)配置SSH免密登录

给三台机器配置主机名映射 在Windows系统中修改hosts文件&#xff0c;新增以下内容&#xff1b; 192.168.xxx.xxx bigdata_node1 192.168.xxx.xxx bigdata_node2 192.168.xxx.xxx bigdata_node33台Linux的/etc/hosts文件中&#xff0c;填入如下内容。 192.168.xxx.xxx bigda…

在UE4虚幻引擎中加入导航网格体边界体积后丧尸不能移动和发现玩家

UE4系列文章目录 文章目录 UE4系列文章目录前言一、用到的知识点二、问题原因 前言 最近使用ue4做第一人称视角射击游戏发现问题&#xff0c;加入导航网格体边界体积后丧尸不能移动和发现玩家。下图是出现的问题图片 一、用到的知识点 1.行为树&#xff1a;控制并显示AI的决…

DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?

​2023年8月16日~18日&#xff0c;第14届中国数据库技术大会&#xff08;DTCC 2023&#xff09;于北京隆重召开&#xff0c;拓数派受邀参与本次大会&#xff0c;PieCloudDB 技术专家邱培峰在大会做了《云原生虚拟数仓 PieCloudDB ETL 方案设计与实现》的主题演讲&#xff0c;详…

promise详细的适用

promise promise的理解 promise对象创建自身带有一个函数&#xff0c;函数中有两个参数(resolve和reject)&#xff0c;这两个参数可以控制promise状态&#xff1b; promise状态默认是pending待定状态&#xff0c;promise中可以通过resolve状态修改成fulfilled 成功状态&#…

PostgresSQL----基于Kubernetes部署PostgresSQL

【PostgresSQL----基于Kubernetes部署PostgresSQL】 文章目录 一、创建SC、PV和PVC存储对象1.1 准备一个nfs服务器1.2 编写SC、PV、PVC等存储资源文件1.3 编写部署PostgresSQL数据库的资源声明文件 二、部署PostgresSQL2.1 部署 PV、PVC等存储对象2.2 部署PostgresSQL数据库2.3…

php获取客户端ip地址及ip所在国家、省份、城市、县区

摘要 获取客户端ip地址&#xff0c;然后使用这个ip地址获取所在的国家、省份、城市&#xff0c;可以在网站中实现IP属地&#xff0c;发布地等功能。 本文的获取IP地址信息均采自网络上免费的IP查询网站&#xff0c;通过其API或者网页HTML解析出的ip地址信息。 代码 <?p…

【Git】Git 基础

Git 基础 参考 Git 中文文档 — https://git-scm.com/book/zh/v2 1.介绍 Git 是目前世界上最先进的分布式版本控制系统&#xff0c;有这么几个特点&#xff1a; 分布式&#xff1a;是用来保存工程源代码历史状态的命令行工具保存点&#xff1a;保存点可以追溯源码中的文件…

解决防火墙导致虚拟机不能ping通宿主机的问题

今天&#xff0c;无缘无故的&#xff0c;虚拟机突然用不了&#xff0c;网络连上不了&#xff0c;一番折腾翻找&#xff0c;最后才发现&#xff0c;是因为虚拟机ping不同宿主主机了&#xff0c;连网关都ping不通了&#xff0c;但是&#xff0c;宿主主机却可以ping通虚拟机 。 最…

Java基础:注解

注解的理解和类型 java注解-最通俗易懂的讲解 廖雪峰java注解 对注解&#xff08;Annotation&#xff09;最直接的理解是&#xff0c;注解本身就相当于一个附加信息&#xff0c;这个附加信息并不会对原有的类&#xff0c;方法等进行处理&#xff0c;进行处理的应该是对附加信息…

文本识别 (OCR)引擎之Tesseract的使用

Tesseract OCR Tesseract概述常见OCR识别平台下载安装配置命令使用语法测试验证 Tesseract的使用安装python库基本使用可能的异常更换语言字体库识别 Tesseract的训练 Tesseract 概述 Tesseract是一个开源文本识别 (OCR)引擎&#xff0c;是目前公认最优秀、最精确的开源OCR系统…

『Bug挖掘机 - 赠书02期』|〖Effective软件测试〗

大家好&#xff0c;我是洋子&#xff0c;前段时间给大家推荐了《测试设计思想》&#xff0c;今天再给大家推荐一本软件测试领域的新书 这本书就比较接地气了&#xff0c;是一本软件测试的入门书籍&#xff0c;但同样适用于1-3年软件测试经验的读者阅读 这本书第一章就用Java代…

如何实现负载均衡

在如今互联网应用日益火热的背景下&#xff0c;为了保证应用程序的高可用性和高性能&#xff0c;负载均衡变得越来越重要。负载均衡是指将传入的请求分配到多个服务器上&#xff0c;以避免单一服务器的过载&#xff0c;提高系统的可用性和性能。而PHP作为一种广泛使用的服务器端…

深入了解 Axios 的 put 请求:使用技巧与最佳实践

在前端开发中&#xff0c;我们经常需要与后端服务器进行数据交互。其中&#xff0c;PUT 请求是一种常用的方法&#xff0c;用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求&#xff0c;我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库&#xff0…

关于用scanf(“%d“,)时非法字符输入导致的死循环的原因及解决方法

现象描述 题目要求输入一个整数n(0<n<20)&#xff0c;需要考虑非法字符输入的情况。若输入非法字符或者不在合法区间&#xff0c;则重新输入。于是我们很自然的打出了如下代码&#xff1a; int a; while(1){scanf("%d",&a);if(a>0&&a<20) …

NSV60600MZ4T1G 双极型晶体管(BJT)学习总结

双极型晶体管的起源: 双极型晶体管是在1947年发明的&#xff0c;第一个晶体管是将两条具有尖锐端点的金属线与锗衬底(germanium substrate)形成点接触(point contact)&#xff0c;以今天的水准来看&#xff0c;此第一个晶体管虽非常简陋但它却改变了整个电子工业及人类的生活方…

关于一次两段式提交和数据库恢复数据我的一些想法

binlog是服务层的功能&#xff0c;而redolog是innodb引擎的功能&#xff0c;binlog主要用于主从复制&#xff0c;redolog主要用做数据的恢复&#xff0c;我们必须保证binlog和redolog日志数据的一致性。恢复数据时也必须遵守此一致性。 1.如果只写一次redolog会出现什么问题&a…

行测图形推理规律(一)元素组成

题库&#xff1a;粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的&#xff0c;但是总结的规律应该是一样的。 规律并不唯一&#xff0c;题库的答案也只是参考答案&#xff0c;切勿当杠精&#xff0c;你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…

开源知识库平台Raneto

什么是 Raneto &#xff1f; Raneto 是一个开源知识库平台&#xff0c;它使用静态 Markdown 文件来支持您的知识库。 官方提供了 doc & demo 网站&#xff0c;即是帮助文档&#xff0c;也是个 demo&#xff0c;地址&#xff1a;https://docs.raneto.com 准备 项目使用con…

Android之 Canvas绘制

一 Canvas介绍 1.1 Canvas 是绘制图形的重要类之一&#xff0c;它可以在 View 或 SurfaceView 上绘制各种图形和文本. 1.2 要创建 Canvas&#xff0c;首先需要有一个 View 或 SurfaceView 对象&#xff0c;在 View 或 SurfaceView 的绘制方法中&#xff0c;可以通过 Canvas 的…

Git的一些常用概念与操作方法分享

Git是一个版本控制系统&#xff0c;它可以记录代码的变化历史并允许多个开发者同时对同一代码库进行开发。以下是Git的基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;- 保存代码的地方。Git仓库包含了所有的版本历史记录、代码以及其他相关文件。 分…