LeetCode 22.括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
解题思路;
DFS深度优先搜索
- 树形结构(满二叉树)表示所有的结果括号可能;这是一个n=2的括号
- 满足题目要求的结果是:["(())","()()"]
- 观察所有的可能,可以发现 “)” 的个数 小于 "("的个数时,不满足条件;
- l , r 表示左括号和右括号的个数,每生成一个就减少一个;
- 当l, r都变成0时,就把生成的括号添加到答案列表中;
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n == 0:
return []
result = []
self.helper(n,n,'',result)
return result
def helper(self,l,r,item,result):# l r 表示待组成括号的左右括号的个数
if r < l:
return
if l == 0 and r == 0:
result.append(item)
if l > 0:
self.helper(l-1,r,item + '(',result) # 生成一个就减少一个
if r > 0:
self.helper(l,r-1,item + ')',result) # 生成一个就减少一个