题解
思路
- 动态规划
代码
class Solution:
### 0113 递归(36 ms,15.1 MB)
def generateParenthesis(self, n: int) -> List[str]:
if n == 0: return ['']
res = []
# 考虑剩下n-1对括号的情况,左边i对,右边n - 1 - i对
for i in range(n):
for l in self.generateParenthesis(i):
for r in self.generateParenthesis(n - 1 - i):
res.append('(' + l + ')' + r)
return res
### 0113 动态规划(36 ms,15.1 MB)
def generateParenthesis(self, n: int) -> List[str]:
if n == 0: return ['']
# 初始化0、1对括号的情况
dp = [[None], ['()']]
# 从2对括号开始遍历,直到n对括号
for i in range(2, n + 1):
tmp = []
for j in range(i):
# 考虑剩下i-1对括号的情况,左边i对,右边i - 1 - j对
dp_l, dp_r = dp[j], dp[i - 1 - j]
for l in dp_l:
for r in dp_r:
if l == None:
l = ''
if r == None:
r = ''
tmp.append('(' + l + ')' + r)
dp.append(tmp)
return dp[-1]
牛客
#
#
# @param n int整型
# @return string字符串一维数组
#
class Solution:
def generateParenthesis(self , n ):
def dfs(last, l, r):
if len(last) == n * 2: # 若已经生成n对括号,则返回
res.append(last)
return
if l < n: # 若左括号的数量少于n,则继续生成
dfs(last + '(', l+1, r)
if r < l: # 若右括号的数量少于左括号的数量,则继续生成
dfs(last + ')', l, r+1)
res = []
dfs('', 0, 0)
return res