题目链接剑指 Offer II 085. 生成匹配的括号
输入:n = 3 # 3对括号组合方式
输出:["((()))","(()())","(())()","()(())","()()()"]
解题思路:
- 可以抽象成树
- 然后就是一个深度优先搜索问题,即先序(根左右)
- 剪枝:开括号 > 2 and 闭括号数 > 开括号(这个代表闭括号是在开阔号前面)
代码如下:剪枝 + 先序遍历
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
if n <= 0: return res
def dfs(path, open, close) -> None:
######-----------------------剪枝----------------------------------######
if open > n or close > open: # 开括号数> n and 闭括号数 > 开括号数
return
if len(path) == 2 * n:
res.append(path) # 根
return
######-----------------------剪枝----------------------------------######
dfs(path + "(", open + 1, close) # 左
dfs(path + ")", open, close + 1) # 右
dfs("", 0, 0)
return res