[LeetCode]22. Generate Parentheses
22. Generate Parentheses
回溯
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
def helper(cur, left, right):
if len(cur) == 2 * n :
res.append(cur)
return
if left < n:
helper(cur+'(', left+1, right)
if right < left:
helper(cur+')', left, right+1)
if n == 0:
return []
res = []
helper('', 0, 0)
return res
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
def helper(cur, left, right):
if not left and not right:
res.append(cur)
return
if left:
helper(cur + '(', left - 1, right)
if right > left:
helper(cur + ')', left, right - 1)
if n == 0:
return []
res = []
helper('', n, n)
return res
记忆化DFS(Memorial DFS)
f(0): ""
f(1): "("f(0)")"
f(2): "("f(0)")"f(1), "("f(1)")"
f(3): "("f(0)")"f(2), "("f(1)")"f(1), "("f(2)")"
所以 f(n) = "("f(0)")"f(n-1) , "("f(1)")"f(n-2) "("f(2)")"f(n-3) ... "("f(i)")"f(n-1-i) ... "(f(n-1)")"
f(n) = ( f(i) ) f(n - 1 - i)
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
dp = {0: [""], 1: ["()"]}
def memorial_dfs(n):
if n not in dp:
dp[n] = []
for i in range(n):
for inner in memorial_dfs(i):
for outter in memorial_dfs(n - i - 1):
dp[n].append('(' + inner + ')' + outter)
return dp[n]
return memorial_dfs(n)

关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法