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

力扣:22-括号生成

题目描述

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

示例 1:

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


示例 2:

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

提示:

1 <= n <= 8

来源:力扣(LeetCode)

题目链接:力扣-22.括号生成

解题思路

就是判断左括号和右括号的数量,如果左括号和右括号的数量都为0说明这是一个有效的括号组合,如果左括号大于右括号说明不符合题意。因为可以发现,第一个字符一定是左括号,如果左括号大于右括号则说明前面有不匹配的括号,所以不符合题意。

因此,左括号一定是小于等于右括号的。当左括号小于等于右括号时,下一个字符可以是左括号也可以是右括号,都需要遍历一遍确保不会遗漏。

代码实现

class Solution {
    vector<string>v;
public:
    vector<string> generateParenthesis(int n) {
        string s="";
        recursion(s,n,n);//递归调用
        return v;

    }
    void recursion(string s,int left,int right)
    {
        //如果左括号和右括号的数量都变为0
        if(left==0&&right==0)
        {
            v.push_back(s);//加入到vector中
            return;
        }
        //如果左括号大于右括号,不符合题意
        if(left>right)
        return;
        //剩余左括号和右括号的数量相同,下一个用左括号
        if(left==right)
        recursion(s+"(",left-1,right);
        else if(left<=right)//剩余左括号数量小于右括号的数量,下一个用左括号或者右括号都可以
        {
            //下一个用左括号
            if(left>0)
            recursion(s+"(",left-1,right);
            //下一个用右括号
            if(right>0)
            recursion(s+")",left,right-1);
        }
    }
};

相关文章:

  • C# netcore 创建WebService(SoapCore)
  • ansible配置主机间免密登陆
  • 在项目中操作MySQL
  • 3倍通气的医用外科口罩,佩戴舒适过滤不打折
  • Linux文件及目录结构
  • lec formality inconclusive举例
  • 2022极端高温!人工智能如何预测森林火灾?| 万物AI
  • redis五大数据类型+redis6 新类型(详解+指令)
  • 【云原生 | 从零开始学Kubernetes】十七、Kubernetes核心技术Service
  • 传述最详细的干货,让简历面试不再成为你找工作的绊脚石
  • 【云原生丨Kubernetes系列⑥】集群的WEB UI管理⼯具:Dashboard 插件
  • 开学季征文|一个爱立Flag 的大冤种
  • 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“
  • 翻译: Transformer一种用于语言理解的新型神经网络架构 Google AI
  • 两种方法,计算带地形起伏的地表面积
  • 「译」Node.js Streams 基础
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • GitUp, 你不可错过的秀外慧中的git工具
  • Hexo+码云+git快速搭建免费的静态Blog
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Python实现BT种子转化为磁力链接【实战】
  • Unix命令
  • vagrant 添加本地 box 安装 laravel homestead
  • 多线程 start 和 run 方法到底有什么区别?
  • 少走弯路,给Java 1~5 年程序员的建议
  • 首页查询功能的一次实现过程
  • ​iOS安全加固方法及实现
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #pragma 指令
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (四)Controller接口控制器详解(三)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)shell调试方法
  • (转载)利用webkit抓取动态网页和链接
  • ./和../以及/和~之间的区别
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net打印*三角形
  • @Controller和@RestController的区别?
  • @Valid和@NotNull字段校验使用
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [20150904]exp slow.txt
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [BZOJ 3282] Tree 【LCT】
  • [codevs 1296] 营业额统计