LeetCode.22。括号生成

题目描述:

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

输入输出实例:

思路:对于这道题目我们可以用回溯法,创建一个函数backtrack(当前字符,左括号数量,右括号数量),这个函数用来递归生成所有的括号组成可能。我们先前创立一个空列表,在backtrack递归过程中满足条件的我们放到列表中,最后返回列表。

在backtrack中,如果当前的字符组成满足长度等于2*n的时候,我们得到一个有效的括号组成,将其加到ans列表;如果当前左括号比n少,我们继续添加左括号;如果当前右括号比左括号少,我们添加右括号。

比如当n==2时候,我们先是添加一个左括号->再添加左括号->再添加右括号->再添加右括号->满足条件将'(())'存入ans。然后返回到'('尝试添加右括号(即'()')->再添加左括号->再添加右括号->将'()()'存入ans->递归结束,return ans

python 复制代码
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        #构建函数backtrack用来构建有效括号组合
        def backtrack(s:str,left:int,right:int):
            #达到目标长度放入
            if len(s) == 2*n:
                ans.append(s)
                return
            
            #左括号数量不够可加左括号
            if left < n :
                backtrack(s+'(',left+1,right)
            
            #右括号不足加右括号
            if right < left :
                backtrack(s+')',left,right+1)
            

        ans = []
        backtrack('',0,0)
        return ans
相关推荐
paeamecium3 分钟前
【PAT甲级真题】- Talent and Virtue (25)
数据结构·c++·算法·pat
Mr_Xuhhh9 分钟前
蓝桥杯复习清单真题(C++版本)
c++·算法·蓝桥杯
tankeven10 分钟前
HJ163 时津风的资源收集
c++·算法
ZC跨境爬虫14 分钟前
免费验证码识别:用ddddocr实现Playwright自动化登录
爬虫·python·自动化
Boop_wu20 分钟前
[Java 算法] 动态规划(4)
数据结构·算法·leetcode
旖-旎22 分钟前
分治(计算右侧小于当前元素的个数)(7)
c++·学习·算法·leetcode·排序算法·归并排序
数据知道24 分钟前
claw-code 源码详细分析:子系统目录地图——几十个顶层包如何用五条轴(会话 / 工具 / 扩展 / 入口 / 桥接)读懂?
服务器·python·ai·claude code
cxr82825 分钟前
GPU 加速声场求解器 - 深度扩展
人工智能·python
zaim127 分钟前
计算机的错误计算(二百二十六)
java·python·c#·c·错数·mpmath
EmmaXLZHONG29 分钟前
Django By Example - 学习笔记
笔记·python·学习·django