class Solution:
def generateParenthesis(self, n: int) -> List[str]:
# 特点:当前某个组合中,右括号的数量一定比左括号少
# 利用回溯算法
left_p = ["(" for _ in range(n)]
right_p = [")" for _ in range(n)]
# print(left_p, right_p)
self.res = []
res = ""
self.backtrack(left_p, right_p, res)
return self.res
def backtrack(self, left_p, right_p, res):
if len(left_p) > len(right_p): # 重点
return
if len(left_p) == len(right_p) == 0:
self.res.append(res)
return
# print(left_p)
# print(right_p)
# print('-------------')
# make choose
# add a left parentheses
if len(left_p) != 0:
left = left_p.pop()
res += left
self.backtrack(left_p[:], right_p[:], res[:])
res = res[:-1]
left_p.append(left)
# add a right parentheses
if len(right_p) != 0:
right = right_p.pop()
res += right
self.backtrack(left_p[:], right_p[:], res[:])
res = res[:-1]
right_p.append(right)
return
力扣-22 括号生成
最新推荐文章于 2022-09-02 13:02:34 发布