题目描述(中等难度)
解题思路
利用left,right分别记录已经添加的左右括号的数目,简单回溯即可
回溯+剪枝
python 代码
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
def backtrace(n,trace,res,left,right,flag):
if left==n and right==n:
res.append(''.join(trace[:]))
return
for i in ["(",")"]:
if i == "(":
left += 1
flag = 1
else:
right += 1
# 如果左括号数量小于右括号数量,说明不是有效的括号组合
if left < right:
continue
if left > n:
left -= 1
continue
if right > n:
right -= 1
continue
trace.append(i)
backtrace(n,trace,res,left,right,flag)
trace.pop()
if flag == 1:
left -= 1
else:
right -= 1
res = []
flag = 0
backtrace(n,["("],res,1,0,flag)
return res
if __name__ == '__main__':
s = Solution()
res = s.generateParenthesis(4)
print(res)