22 - 括号生成 - python

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

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

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

回溯法:括号生成问题的两个重要性质:

  • 一个「合法」括号组合的左括号数量一定等于右括号数量,这个显而易见
  • 对于一个「合法」的括号字符串组合p,必然对于任何 0 < = i < l e n ( p ) 0 <= i < len(p) 都有:子串 p [ 0.. i ] p[0..i] 左括号的数量都大于或等于右括号的数量
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
    	# 保存合法结果
        res = []
        # 当前的括号序列
        track = []
        def backtrack(left, right, track):
        	# 递归出口
        	# 非法情况
            if right < left: return
            if left < 0 or right < 0: return 
            # 合法情况,保存结果
            if left == 0 and right == 0:
                res.append(''.join(track))
                return

            if left > 0:
                track.append('(')
                backtrack(left - 1, right, track)
                track.pop()

            if right > 0:
                track.append(')')
                backtrack(left, right - 1, track)
                track.pop()
                
        backtrack(n, n, track)
        return res

回溯算法最佳实践:合法括号生成

发布了448 篇原创文章 · 获赞 122 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/Forlogen/article/details/105374770