数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
示例 2:
输入:n = 1
输出:[“()”]
动态规划(深度优先算法)
- 使用二叉树模型深度搜索可行的括号组合
- 停止搜索的条件是括号个数=n或者右括号的个数多于左括号个数,即括号无效
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n < 1:return []
res = []
def dfs(root,left,right):
if left == right == 0:
res.append(root)
return
if right < left: return
if left > 0:
dfs(root+'(',left-1,right)
if right > 0:
dfs(root+')',left,right-1)
dfs('',n,n)
return res
基础动态规划
直接使用状态转移函数
res[n] = ‘(’ + res[p] +‘)’ + res[q]
p+q+1 = n
class Solution:
def generateParenthesis(self , n: int) -> List[str]:
res = {}
res[0],res[1] = [''],['()']
if n < 2:return res[n]
for m in range(2,n+1):
res[m] = []
for q in range(m):
p = m-q-1
sub1 = res[p]
sub2 = res[q]
for s1 in sub1:
for s2 in sub2:
res[m].append('('+s1+')'+s2)
return res[n]