leetcode_22 括号生成

88 阅读1分钟

要求

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

有效括号组合需满足:左括号必须以正确的顺序闭合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

核心代码

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        res = []
        def dfs(tmp,left,right):
            if len(tmp) == 2 * n:
                res.append(tmp)
            if left:
                dfs(tmp + "(" , left - 1 , right)
            if right > left:
                dfs(tmp + ")" , left , right - 1)
        dfs("",n,n)
        return res

image.png

解题思路:回溯 + 剪枝,剪枝原则:放了左括号才能放右括号,left 代表还能放左括号的个数,right 代表还能放右括号的个数,具体的运行流程见图片(有待补充)。