22. 括号生成

    它看似括号应该和栈有关系,其实他是个动态规划。在已知n = i 时候的情况,n = i+1时候,就相当于往n = i 的情况里添加一对括号。但是不能瞎填,不能在括进去格式不对的部分。为了保证这一点,其实 n<i 时候就已经能保证格式是有效的。所以就括进去之前的部分的就可以。

       这个想法确实很巧妙啊,我之前就想从里面扣除成对的括号,其实n=i不只和n=i-1有关系。

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        if n == 0:
            return ""
        dp = [None for _ in range(n+1)]
        dp[0] = [""]
        for i in range(n+1):
            cur = []
            for j in range(i):
                # 从0到i  逐渐括进去
                left = dp[j]
                # 右侧的i-j-1 -1是为了保证加进去括号长度还是i
                right = dp[i-j-1]
                for s1 in left:
                    for s2 in right:
                        cur.append("("+s1+")"+s2)
                dp[i] = cur
        return dp[n]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值