首页 > 其他分享 >【LeetCode】22. 括号生成

【LeetCode】22. 括号生成

时间:2023-12-01 11:25:00浏览次数:26  
标签:right cur 22 res 括号 str LeetCode left

题目

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

 

示例 1:

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

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

提示:

1 <= n <= 8

思路:

利用深度优先遍历,记录左括号可用个数left以及右括号可用个数right。

当left = right = 0的时候,则得到了一个正确答案

当left > right的时候,则剪枝,因为剩余的左括号比右括号多的时候,则后续无法组成合法的括号了

代码如下:

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        res = []
        # cur_str为当前的字符串
        cur_str = ''
        def dfs(cur_str, left, right):
            # left, right 为当前剩余的左右括号个数
            if left == 0 and right == 0:
                # 找到了满足条件的一个解,放入res中
                res.append(cur_str)
                # 返回上一层
                return 
            if right < left:
                # 当右边剩余的数量小于左边,则直接返回。
                # 因为左边数量比右边多了之后,则后续不能组成合法的括号对了
                return
            if left > 0:
                # 优先放置左括号
                dfs(cur_str + '(', left - 1, right)
            if right > 0:
                dfs(cur_str + ')', left, right - 1)
        dfs(cur_str, n, n)
        return res 

标签:right,cur,22,res,括号,str,LeetCode,left
From: https://www.cnblogs.com/basilicata/p/17869300.html

相关文章

  • Visual Studio 2022:Vulkan 环境配置
    (前置)安装VulkanSDK,并确认安装目录,此后记为%VulkanDir%(例如:C:/VulkanSDK/1.3.261.1)VisualStudio中新建C++项目,进入“项目”>>“[项目名]属性”,上方两个选项设置为“所有配置”“所有平台”C/C++>>常规>>附加包含目录:添加%VulkanDir%/Include(替换%VulkanDir%为实际目录,下同)......
  • 1000多页!LeetCode刷题手册分享
    这本手册确实是一部令人印象深刻的作品。(手册链接在文末!!!)首先,内容充实是这本手册的一大亮点。它涵盖了广泛的算法和数据结构主题,包括数组、链表、树、图、排序算法、动态规划等等。每个主题都有详细的解释、示例代码和复杂度分析,帮助读者深入理解和掌握相关知识。此外,手册还提供......
  • 22-基础SQL-多表查询-连接查询(内连接、外连接、自连接)
    多表查询分类  案例:创建部门表和员工表(熟悉多表查询)--部门表CREATETABLEdept(idintauto_incrementcomment"ID"primarykey,namevarchar(50)notnullcomment"部门名称")comment"部门表";--员工表CREATETABLEemp(idintauto_increm......
  • 代码随性训练营第四十九天(Python)| 121. 买卖股票的最佳时机 、122.买卖股票的最佳时机I
    121.买卖股票的最佳时机1、动态规划classSolution:defmaxProfit(self,prices:List[int])->int:#dp[i][0]代表第i天持有股票获取的最大利益#dp[i][1]代表第i天不持有股票获取的最大利益dp=[[0]*2for_inrange(len(prices)......
  • 22、Scaffold属性 抽屉菜单Drawer
    在Scaffold组件里面传入drawer参数可以定义左侧边栏,传入endDrawer可以定义右侧边栏。侧边栏默认是隐藏的,我们可以通过手指滑动显示侧边栏,也可以通过点击按钮显示侧边栏。 classMyFlutterAppextendsStatelessWidget{constMyFlutterApp({super.key});@overrideW......
  • P2522 [HAOI2011] Problem b
    题意求\(\sum_{i=a}^{b}\sum_{j=c}^{d}[\gcd(i,j)=k]\)。Sol简单容斥一下。\[\begin{aligned}\sum_{i=a}^{b}\sum_{j=c}^{d}[\gcd(i,j)=k]&=\sum_{i=1}^{b}\sum_{j=1}^{d}[\gcd(i,j)=k]\\&-\sum_{i=1}^{b......
  • 【专题】2022年中国跨境电商行业研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32044近年来,我国的跨境电子商务发展迅速,在过去五年中,其贸易额增长率达到了16.2%,已经成为稳定对外贸易的一支重要力量。阅读原文,获取专题报告合集全文,解锁文末52份跨境电商行业相关报告。一方面,随着跨境电子商务的发展,跨境电子商务的监管政策得到了......
  • 代码随想训练营第四十五天(Python)| 70. 爬楼梯 (进阶)、322. 零钱兑换 、 279.完全平方数
    70.爬楼梯(进阶)1、使用01背包解法classSolution:defclimbStairs(self,n:int)->int:#dp数组代表爬上第i阶有dp[j]种方法dp=[0]*(n+1)dp[0]=1m=2#排列先背包后物品foriinrange(n+1):......
  • 重装vs2022 nuget添加包报错: Unexpected character encountered while parsing value:
    工具--》选项--》Nuget包管理器,点击清除所有Nuget存储 参考文献:关于VSNuGet包无法更新,设置包源映射无效的问题-CSDN博客         微软官方文献 ......
  • ubuntu server 22 LTS 安装MySQL8(二进制源码方式)
    原作来源:https://github.com/aminglinux/daily_shell/blob/main/29.sh根据我自己情况稍作修改mysql下载地址:https://downloads.mysql.com/archives/community/ 按照顺序执行逐行执行注意执行过程的提示,报错需处理:tar-xvfmysql-8.0.34-linux-glibc2.17-x86_64.tarsudo......