https://leetcode-cn.com/problems/generate-parentheses/
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
回溯法:
class Solution:
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
res = []
def bracket(s='', left=0, right=0):
"""
:param s:当前生成序列
:param left:左括号个数
:param right:右括号个数
:return:
"""
if len(s) == 2*n:
res.append(s)
return
if left < n:
bracket(s+'(', left+1, right)
if left > right:
bracket(s+')', left, right+1)
bracket()
return res
把n看成左右两部分,左边被一个括号包着(右边也可以,修改第十三行代码,把括号放在右边左右即可):
class Solution:
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
if n == 0:
return ['']
res = []
for i in range(n):
for left in self.generateParenthesis(i):
for right in self.generateParenthesis(n-1-i):
res.append('('+left+')'+right)
return res