首页 > 其他分享 >22. 括号生成(中)

22. 括号生成(中)

时间:2023-12-30 21:12:47浏览次数:39  
标签:right 22 组合 track res 生成 括号 left

目录

题目

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

示例 1:

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

示例 2:

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

题解:回溯+剪枝

  • 首先翻译一下题目:现在有2n个位置,每个位置可以放'('或者')',组成的所有括号组合中,有多少个是合法的?并保存输出。
  • 思路:先把所有的括号组合穷举出来,在筛选合法的即可
  • 合法的性质:左括号数量等于右括号;对于一个合法的括号字符串p,必然对于任何0<=i<len(p)都有:子串p[0...i]中的左括号数量都大于等于右括号数量
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        def backtrack(left: int, right: int, track: List[str], res: List[str]):
            # 如果右括号数目小于左括号数目,说明当前组合是无效的,直接返回
            if right < left:
                return
            # 如果左括号或右括号的数目小于 0,说明当前组合是无效的,直接返回
            if left < 0 or right < 0:
                return
            # 如果左括号和右括号的数目都为 0,说明找到了一个有效的括号组合,将其加入结果列表 res 中
            if left == 0 and right == 0:
                res.append("".join(track))
                return
            
            # 尝试添加一个左括号到当前组合中,并进行递归调用
            track.append('(')#选择
            backtrack(left - 1, right, track, res)
            track.pop()  # 回溯,移除最后添加的左括号

            # 尝试添加一个右括号到当前组合中,并进行递归调用
            track.append(')')#选择
            backtrack(left, right - 1, track, res)
            track.pop()  # 回溯,移除最后添加的右括号

        if n == 0:
            return []

        track = []  # 用于追踪当前的括号组合
        res = []  # 保存有效的括号组合
        backtrack(n, n, track, res)  # 调用回溯函数生成括号组合
        return res  # 返回结果列表

标签:right,22,组合,track,res,生成,括号,left
From: https://www.cnblogs.com/lushuang55/p/17936818

相关文章

  • Python+自动化测试生成HTML报告
    ......
  • windows下编写lua脚本生成exe
    之前我有个想法,想在window下,远程执行服务器Linux下的某个脚本,我第一时间想到的是用jekenis,但感觉如果能对输入参数更灵活操作,会更好些,然后发现一个比较有意思的工具srlua ,它可以将lua编写的代码打包输出成exe文件。srlua目录内容如下:操作说明:glue.exesrlua.exetest.lu......
  • OpenEuler22.03安装PostgreSQL15.5并配置一主二从
    环境准备序号IP标识(hostname)CPU/内存配置系统盘数据盘1192.168.8.190pg018C+16G80G500G2192.168.8.191pg028C+16G80G500G3192.168.8.192pg038C+16G80G500G规划的文件夹目录(所有主机):##以下目录为本文规划的目录,可以提前创建,也可以跟着......
  • 【Python数据分析课程设计】大数据分析—Pokemon 1996-2022年各世代宝可梦数据集分析
    一、选题背景宝可梦是一种受欢迎的媒体内容和游戏系列,由任天堂、GameFreak和Creatures等公司合作开发。它们是虚构的生物角色,具有各种不同的属性、技能和能力。自1996年首次推出以来,宝可梦已经成为全球范围内的文化现象。宝可梦不仅仅是娱乐产品,它们也在社会中产生了广泛的影响: ......
  • SharePoint 开发:如何通过脚本生成Site Collection的Permission Report
    Blog链接:https://blog.51cto.com/13969817越来越多的企业,为了数据安全或者审计的需求,需要管理员定期将SharePoint网站集权限生成报告,其中包括:·      网站集下所有子网站的权限设置·      网站集管理员列表·      应用于每个SharePoint对象的权限,如网站(子网......
  • 彭州中学初2022级19班运动会回忆
     ......
  • 彭州中学初2022级19班元旦晚会回忆
     ......
  • 彭州中学初2022级19班集体生日会回忆
     ......
  • ldt - 20231225部门考核题
    ldt-20231225部门考核题什么是闭包,并举例说明。函数可以访问和操作其方法作用域之外的变量的作用域链。例如,在一个函数内部定义另一个函数,并返回这个函数,这个函数就可以访问其父级函数的变量,即使父级函数已经执行完毕。问题:请解释一下什么是前端中的JavaScript中的闭包(Closur......
  • Linux使用OpenSSL生成SSL证书
    实现本地nginxip+ssl的访问注意openssl和ssh-keygen的区别生成私钥文件opensslgenrsa-des3-outlocalhost.key2048去除口令,否则启动nginx时需要密码opensslrsa-inlocalhost.key-outlocalhost.key创建请求证书opensslreq-new-keylocalhost.key-outlocalhost......