力扣hot100:22.括号生成(回溯)

e5d58685010140a5b66c9a1598305d8e.png

复习一下:

        回溯法解决的问题都可以抽象为树形结构。回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度

        对于同一层而言,其儿子都是等价的不同情况,因此当儿子处理完之后,儿子应该回撤使得本层能继续遍历其他儿子。同理本层应当回撤当父亲结点遍历其他儿子。

       代码随想录:回溯 对于排列组合的回溯问题,由于每一层当前集合中的每一个数都能被选择构成不同的情况,因此函数体用for循环遍历选择元素,让不同元素依次排在答案中本层的“第一位”往下遍历。如果是子集问题,可以在本层按顺序选择,下一层就不再选择本层之前被忽略的元素。但是本题不同,本题需要考虑右括号和左括号配对的情况,不能简单遍历元素。

        由于左括号的数量大于右括号的数量时,必然可以放右括号,并且左括号随时可以放。本题采用分情况的回溯方式

①有左括号时放左括号继续递归
②剩余可放右括号的数量>剩余可放左括号的数量时,放右括号继续递归。

结束条件:左右括号剩余数量都为0

为了不影响父节点继续分情况讨论,必须pop出栈。

例如:

第一层 压入(

第二层 压入)

第三层 压入(  并处理完之后,未弹出 返回第二层

第二层 弹出末尾的(,而实际上应该弹出)才对

回溯

提速的两个细节:

①同时为0可以用位运算

②vector使用emplace_back()

2e48d6105a664844a6e7f561c21c6a16.png

class Solution {
public:void back_tracking(int left,int right){if(!(left|right)){ans.emplace_back(cur);return;}if(right>left){cur.push_back(')');back_tracking(left,right-1);cur.pop_back();}if(left){cur.push_back('(');back_tracking(left-1,right);cur.pop_back();}return;}vector<string> generateParenthesis(int n) {back_tracking(n,n);return ans;}
private:vector<string> ans;string cur;
};

 

 

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

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

相关文章

【Poe】保姆级注册教程

AI聊天机器人已成为技术界的热点。Quora推出了其全新的AI聊天机器人应用——poe&#xff0c;为用户提供了一种新的与人工智能进行互动的方式。与其他常见的AI聊天机器人不同&#xff0c;poe支持多家公司的AI系统&#xff0c;例如OpenAI的ChatGPT和Anthropic的聊天机器人。本教程…

【零基础学习01】嵌入式linux驱动中pinctrl和gpio子系统实现

大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。 今天给大家分享一下,linux系统里面pinctrl和gpio子系统控制实验,操作硬件为I.MX6ULL开发板。 第一:pinctrl和gpio子系统简介 Linux系统是一个庞大又完善的系统,如果采用…

Window部署Oracle并实现公网环境远程访问本地数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

基于单片机的机动车智能远光灯系统设计

目 录 摘 要 I Abstract II 引 言 1 1 主要研究内容及总体设计方案 3 1.1 主要研究内容 3 1.2 系统总体方案选择 3 1.3 系统功能的确定 4 2 硬件电路的设计 5 2.1 单片机控制模块设计 5 2.2 液晶显示模块电路设计 7 2.3 远近灯光电路设计 9 2.4 按键电路设计 9 2.5 超声波电路…

5G与智慧文旅的融合发展:推动旅游业转型升级与可持续发展

随着5G技术的飞速发展和广泛应用&#xff0c;其与智慧文旅的融合发展正成为推动旅游业转型升级与可持续发展的重要力量。5G技术以其高速率、低时延、大连接的特性&#xff0c;为智慧文旅注入了新的活力&#xff0c;助力旅游业实现更高效、更智能、更绿色的发展。本文将深入探讨…

保持长期高效的七个法则(一)7 Rules for Staying Productive Long-Term(1)

Easily the best habit I’ve ever started was to use a productivity system.The idea is simple:organizing all the stuff you need to do (and how you’re going to do it) prevents a lot of internal struggle to get things done. 无疑&#xff0c;我曾经建立过的最好…

AI辅助研发

随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI正逐渐渗透到研发的各个环节&#xff0c;变革着传统的研发模式。在这一背景下&#xff0c;AI辅助研发不仅…

【初始MongoDB】MongoDB的使用(对比MySQL)

MongoDB简介 1、NoSQL简介 NoSQL(NoSQL Not Only SQL)&#xff0c;意即反SQL运动&#xff0c;指的是非关系型的数据库&#xff0c;是一项全新的数据库革命性运动&#xff0c;早期就有人提出&#xff0c;发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储…

Qt 数据库驱动未装载MYSQL

一、第一部分 0.Qt 连接mysql数据库时报错&#xff1a; QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 QT连接代码&#xff1a; bool createMysqlConn() {QSqlDatabase sqldb QSqlDatabase::addDatabase(&qu…

如何配置固定TCP公网地址实现远程访问内网MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

Java建造者模式源码剖析及使用场景

一、介绍 Java 中的建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式主要用于创建一些复杂的对象,这些对象内部由多个部分组成,各部分之间存在着复杂的相互依赖关系。 二、有什么好处&am…

JVM工作原理与实战(四十三):JVM常见面试题目

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JVM常见面试题目 1.什么是类加载器&#xff0c;有哪些常见的类加载器&#xff1f; 2.什么是双亲委派机制&#xff0c;以及如何打破双亲委派机制&#xff1f; 3.如何判断堆上的对…

Hive超市零售案例

超市零售案例 一、部分数据展示 Fiskars 剪刀| 蓝色,61,中国,华东,杭州,用品,曾惠,2,浙江,办公用品,US-2019-1357144,130 GlobeWeis 搭扣信封| 红色,43,中国,西南,内江,信封,许安,2,四川,办公用品,CN-2019-1973789,125 Cardinal 孔加固材料| 回收,4,中国,西南,内江,装订机,许…

Unity性能优化篇(十) 模型优化之网格合并 Easy Mesh Combine Tool插件使用以及代码实现网格合并

把多个模型的网格合并为一个网格。可以使用自己写代码&#xff0c;使用Unity自带的CombineMeshes方法&#xff0c;也可以使用资源商店的插件&#xff0c;在资源商店搜Mesh Combine可以搜索到相关的插件&#xff0c;例如Easy Mesh Combine Tool等插件。 可大幅度减少Batches数量…

css flex 布局换行

默认使用display: flex;是不换行的&#xff0c;只需要加上flex-wrap: wrap;就行了&#xff0c;效果图 .app-center {display: flex;flex-wrap: wrap;justify-content:flex-start; } 通过上面我们发现虽然时间换行了&#xff0c;但是每行的边距不一样 加上这个就行了&#xff…

Jupyter Notebook使用教程——从Anaconda环境构建到Markdown、LaTex语法介绍

0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;希望批评指正&#xff0c;共同进步。 你是否在视频教程或说明文档或Githu…

软件测试面试:接口自动化测试面试题(含答案+文档)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、json和字典的区别&#xff1f; Json是轻量级的数据交互格式…

ChatGPT 基本用法!ChatGPT4的prompt的使用例子!

授人以鱼&#xff0c;不如授人以渔。这句话在AI领域尤为贴切&#xff0c;尤其是在构建与AI模型交互的prompt&#xff08;提示&#xff09;时。OpenAI在Discord官方服务器上设有一个名为prompt-library的频道&#xff0c;这里聚集了各种创意和专业的prompt&#xff0c;涵盖了从写…

Linux C 中执行shell命令

文章目录 摘要前言exec函数的使用system函数使用popen函数的使用 摘要 本文尝试使用exec,system,popen函数&#xff0c;来执行一个shell命令。(1) 如果只需要执行命令后的返回值&#xff0c;不关心标准输出&#xff0c;错误输出&#xff0c;可以使用system函数。(2) 如果希望拿…

基于java+springboot+vue实现的火车票订票系统(文末源码+Lw)294

摘要 火车票订票系统可以对火车票订票系统信息进行集中管理&#xff0c;可以真正避免传统管理的缺陷。火车票订票系统是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff0c;数据维护和统计&#xf…