leetcode--括号生成--python

文章目录

  • 题目
    • 题目详情
    • 示例
  • 解题思路
    • 思路
    • 代码
    • 运行结果
    • 最佳方案

题目

题目详情

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

示例

例如,给出 n = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

解题思路

思路

  1. 运用回溯法
  2. 回溯法的主要思想是从一条路往前走,能进则进,不能进则退回来,换一条路再试

代码

class Solution(object):
    def generateParenthesis(self, N):
        ans = []
        def backtrack(S = '', left = 0, right = 0):
            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)

        backtrack()
        return ans

if __name__ == "__main__":
	obj = Solution()
	obj.generateParenthesis(3)

运行结果

leetcode--括号生成--python_第1张图片

最佳方案

36ms

class Solution:
    cache = {1: ['()'], 0: ['']}
    def generateParenthesis(self, n):
        ret = []
        if n in self.cache:
            return self.cache[n]
        for i in range(n):
            inners = self.generateParenthesis(i)
            outers = self.generateParenthesis(n-i-1)
            for inner in inners:
                for outer in outers:
                    ret.append('(' + inner + ')' + outer)
        return ret

你可能感兴趣的:(leetcode)