当前位置: 首页 > news >正文

LeetCode 22. 括号生成

 题目描述  

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

示例

示例 1:

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

示例 2:

输入:n = 1
输出:["()"]

解法

1.回溯法

解题思路

       回溯的第一步是对一颗满二叉树进行深度优先遍历,我们先写出一个有终止条件的简单深度优先遍历的代码:

class Solution {

public:

    vector<string> generateParenthesis(int n) {

        vector<string> ans;

        if(n <= 0) return ans;

        auto dfs = [&](this auto && dfs,string path){

            if(path.size() == 2 * n){

                ans.push_back(path);

                return;

            }

            dfs(path + '(');

            dfs(path + ')');

        };

        dfs("");

        return ans;

    }

};

        上面这段代码因为有path.size() == 2 * n这个终止条件,返回的结果满足了path长度这一条件,没有满足左括号个数等于右括号个数这第二个条件,也没有满足遍历过程中左括号个数要大于等于右括号个数(完成闭合的必要条件)这第三个条件。于是我们需要在把path装入ans前要保证path满足以上提到的每一个条件。

        我们需要添加left和right这两个局部变量,记录当前path中的"("和")"的个数。然后添加if(left > n || right > left) return;这一终止条件,就可以得到预期结果。

class Solution {
public:vector<string> generateParenthesis(int n) {vector<string> ans;if(n <= 0) return ans;auto dfs = [&](this auto && dfs,string path,int left,int right){if(left > n || right > left) return;   //right > left 用来排除‘)’在前面的情况if(path.size() == 2 * n){ans.push_back(path);return;}dfs(path + '(',left + 1,right);dfs(path + ')',left,right + 1);};dfs("",0,0);return ans;}
};

        时间复杂度O(LogN),空间复杂度O(1)

http://www.dtcms.com/a/536521.html

相关文章:

  • IHR 2025 | 移远通信携Robrain AI解决方案亮相,开启机器人全感官交互新纪元
  • 淘宝客做网站自动更新写wordpress插件吗
  • 金融--------
  • 视频号AI口播:中老年赛道发力
  • 「LegionSpace Hackathon」 通付盾第六届黑客松即将开启
  • STM32外设面试速通:UART、I2C、SPI、DMA、RAM/FLASH与ADC/DAC
  • “芯”动力,净无止境:华芯微特的吸尘器控制方案详解
  • FFmpeg 基本数据结构 AVIOContext分析
  • SAP SD系统开票审批功能分享
  • 有口碑的常州网站优化wordpress发邮件慢
  • 注册中心(discovery)和配置中心(config)
  • Abaqus部件间Cohesive单元建立的共面识别技术
  • 建设网站有哪些步骤金螳螂装饰公司
  • 商城网站建设公司排行在线代理网页浏览
  • 【Linux】多线程同步与互斥机制详解:从互斥锁到条件变量与信号量
  • iOS混淆实战用多工具组合把IPA加固做成可复用的工程能力(iOS混淆 IPA加固 无源码混淆
  • RTPENGINE ISSUE 1818(silent-timeout有关)
  • LeetCode:231. 2 的幂/136. 只出现一次的数字
  • Flutter fedaora42 64位安装 避坑指南
  • Docker自动化部署与配置详解③
  • istio业务返回503问题
  • 建设服装网站的意义国内免费空间可以做什么网站
  • 餐饮商城网站制作多少钱动漫设计一年学费多少
  • Web 前端工具全流程指南 从开发到调试的完整生态体系
  • 清理谷歌浏览器垃圾文件 Chrome “User Data”
  • 科技创新的重要前沿是新网站前期seo怎么做
  • [论文笔记•(多智能体)]LLMs Can Simulate Standardized Patients via Agent Coevolution
  • CAS:2055198-03-1,PC-Biotin-PEG4-NHS carbonate在分子标记与生物分析中的应用潜力
  • 人工智能时代医疗大健康微服务编程:架构与实践(代码部分)
  • 【论文阅读】AAAI 2025 | 面向精确分割式联邦学习的多模型聚合与知识重放