leetcode小白,仅作为记录方便回顾。
题目:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
解题思路:
有效的括号组合需要满足2个规律,以n=2为例。
1.左括号数量=右括号数量=n,并从左括号开始。
2.用left来统计’(’(左括号剩余数量)的个数,right统计’)‘的个数。在生成过程中left一定小于right
所以我们可以用深度优先遍历dfs的方法来解决这个问题
观察上图,可以总结以下几点结论
1.存在剩余左右括号时,可以产生分支
2.只有存在剩余左括号时才可以进行左分支
3.只有0<=left<right,才能进行右分支
4.left=right=0时结算。
from typing import List
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
cur_str = ''
def dfs(cur_str, left, right):
"""
:param cur_str: 从根结点到叶子结点的路径字符串
:param left: 左括号还可以使用的个数
:param right: 右括号还可以使用的个数
:return:
"""
if left == 0 and right == 0:
res.append(cur_str)
return
if right < left:
return
if left > 0:
dfs(cur_str + '(', left - 1, right)
if right > 0:
dfs(cur_str + ')', left, right - 1)
dfs(cur_str, n, n)
return res