1、题目描述
https://leetcode-cn.com/problems/generate-parentheses/
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
3个左括号,3个右括号,一共有5种组合。
2、代码详解
标签:回溯算法
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
self.ans = []
self._generate(0, 0, n, '')
return self.ans
def _generate(self, left, right, n, result):
# n 代表用过几个括号,左括号n次使用,右括号n次使用
# 当左右括号都达到n次
if left == n and right == n:
self.ans.append(result)
return
# 左括号加入:无限制
if left < n:
self._generate(left + 1, right, n, result + '(')
# 右括号加入:必须先有左括号,即left > right
if left > right and right < n:
self._generate(left, right + 1, n, result + ')')
s = Solution()
n = 3
print(s.generateParenthesis(n))
输出
['((()))',
'(()())',
'(())()',
'()(())',
'()()()']
其他精华解法:回溯算法(深度优先遍历)+ 广度优先遍历 + 动态规划
https://leetcode-cn.com/problems/generate-parentheses/solution/hui-su-suan-fa-by-liweiwei1419/