LeetCode 22. 括号生成(Medium)

在这里插入图片描述
【题目链接】

题解

  1. 括号生成
  2. 【最简单易懂的】动态规划

思路

在这里插入图片描述

  • 动态规划
    在这里插入图片描述

代码

class Solution:
    ### 0113 递归(36 ms,15.1 MB)
    def generateParenthesis(self, n: int) -> List[str]:
        if n == 0: return ['']

        res = []

        # 考虑剩下n-1对括号的情况,左边i对,右边n - 1 - i对
        for i in range(n):
            for l in self.generateParenthesis(i):
                for r in self.generateParenthesis(n - 1 - i):
                    res.append('(' + l + ')' + r)
        
        return res

    ### 0113 动态规划(36 ms,15.1 MB)
    def generateParenthesis(self, n: int) -> List[str]:
        if n == 0: return ['']

        # 初始化0、1对括号的情况
        dp = [[None], ['()']]

        # 从2对括号开始遍历,直到n对括号
        for i in range(2, n + 1):
            tmp = []

            for j in range(i):
                # 考虑剩下i-1对括号的情况,左边i对,右边i - 1 - j对
                dp_l, dp_r = dp[j], dp[i - 1 - j]
                
                for l in dp_l:
                    for r in dp_r:
                        if l == None:
                            l = ''
                        if r == None:
                            r = ''
                        
                        tmp.append('(' + l + ')' + r)

            dp.append(tmp)

        return dp[-1]

牛客

在这里插入图片描述

#
# 
# @param n int整型 
# @return string字符串一维数组
#
class Solution:
    def generateParenthesis(self , n ):
        def dfs(last, l, r):
            if len(last) == n * 2: # 若已经生成n对括号,则返回
                res.append(last)
                return
            
            if l < n: # 若左括号的数量少于n,则继续生成
                dfs(last + '(', l+1, r)
                
            if r < l: # 若右括号的数量少于左括号的数量,则继续生成
                dfs(last + ')', l, r+1)
        
        res = []
        dfs('', 0, 0)
        
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值