力扣 括号生成 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

上一篇:LeetCode-Java题解 26. Remove Duplicates from Sorted Array


下一篇:腾讯五十题 No.19旋转链表