题目描述
解法一:dfs(Python)
解法一和解法二都可以详细参考 回溯算法(深度优先遍历)+ 广度优先遍历 + 动态规划
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
cur_str = ''
def dfs(cur_str, left, right):
if left == 0 and right == 0:
res.append(cur_str)
return
if right < left:
return
if left > 0:
dfs(cur_str + '(', left - 1, right)
if right > 0:
dfs(cur_str + ')', left, right - 1)
dfs(cur_str, n, n)
return res
解法二:动态规划(Python)
简单的来说就是一句话:
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n == 0: return []
dp = [0 for _ in range(n + 1)]
dp[0] = [""]
for i in range(1, n+1):
cur = []
for j in range(i):
left = dp[j]
right = dp[i - j - 1]
for s1 in left:
for s2 in right:
cur.append("(" + s1 + ")" + s2)
dp[i] = cur
return dp[n]