回溯的基本思想是将各种情况用树表示出来,然后进行深度遍历或者广度遍历即可,在遍历过程中对于不合理答案剪枝处理。
回溯两种方法,深度遍历和广度遍历,深度遍历用递归实现,广度遍历用队列实现。
代码如下:
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res=[]
def dfs(paths,left,right):
//写递归总是要先给出递归的出口
//当左括号数大于括号对数时或者右括号数大于左括号数时必然不满足要求,剪枝处理
if left>n or right>left:return
//当括号对数满足题给要求时认为时一种解的情况,将答案添加进解的列表中
if len(paths)==2*n:
res.append(paths)
return
//进行递归,添加什么括号什么括号数量加1
dfs(paths+'(',left+1,right)
dfs(paths+')',left,right+1)
dfs('',0,0)
return res