Python教程

力扣 括号生成 Python

本文主要是介绍力扣 括号生成 Python,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 这个题用动态规划的思路来做。初始化一个一维列表来记录 括号对数 <= n 的所有状态,如 dp[3] 包含括号对数为3的所有序列。只要保证从第一个状态是正确的序列,设计好状态转移,就可以保证后续得到的所有括号序列都是正确的

初始条件:dp[0] = [""]

状态转移:temp = "(" + neck + ")" + tail,其中neck是括号对数为m的序列 (取自 dp[m] ),tail是括号对数n的序列 (取自 dp[n] ),temp将存进 dp[m + n + 1] 的列表

代码很简单,如下:

class Solution(object):
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        dp = [[] for _ in range(n + 1)]
        dp[0].append("")
        for pairs in range(1, n + 1):
            # 当前想得到的括号对数
            for tail_n in range(pairs):
                # tail部分的括号对数
                for neck in dp[pairs - 1 - tail_n]:
                    for tail in dp[tail_n]:
                        temp = "(" + neck + ")" + tail
                        dp[pairs].append(temp)
        return dp[-1]

还有另一种思路是利用了括号序列的的一个性质,string[: n] 恒满足:"("的个数 >= ")"的个数。然后用递归函数来逐个添加字符。我个人不喜欢递归,做Fibonacci数列得到的教训。能用栈就用栈吧,如果栈太复杂再考虑递归

这篇关于力扣 括号生成 Python的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!