Skip to main content

22.生成括号

标签: backtracking, string

难度: Medium

通过率: 76.04%

原题链接: https://leetcode.com/problems/generate-parentheses/description/

题目描述

给定 nn 对括号,编写一个函数生成所有可能的、格式正确的括号组合。

解题思路

我们需要生成所有的可能组合,其中每一个组合都是格式正确的括号。要实现这一点,可以使用回溯法来解决问题。具体步骤如下:

  1. 定义一个函数 backtrack,它使用一个递归的方法来尝试生成括号组合。
  2. 使用两个计数器 openclose 来跟踪当前生成的括号字符串中已经加入的左括号和右括号的数量。
  3. 当左括号 open 的数量小于 n 时,可以添加左括号(这保证了左括号配对的可能性);当右括号 close 的数量小于 open 时,可以添加右括号(这确保了当前子字符串是格式正确的)。`
  4. 当生成的字符串长度达到 2*n 时,说明生成了一个完成的括号组合,可以将其加入结果列表。`
  5. 重复上述步骤直到所有可能的组合都生成完成。`

代码实现

def generateParenthesis(n):
def backtrack(S = '', open = 0, close = 0):
# 如果当前括号组合长度为2 * n,那么就是一个有效的结果
if len(S) == 2 * n:
result.append(S)
return
# 如果我们还可以添加左括号
if open < n:
backtrack(S + '(', open + 1, close)
# 如果我们还可以添加右括号
if close < open:
backtrack(S + ')', open, close + 1)

result = []
backtrack()
return result

复杂度分析

  • 时间复杂度:生成有效括号组合的数量是 Catalan 数,给定 nn 对括号,总的组合数为 1n+1(2nn)\frac{1}{n+1} \binom{2n}{n},因此时间复杂度是 O(4nn)O\left(\frac{4^n}{\sqrt{n}}\right)。`
  • 空间复杂度:栈的最大深度是 O(n)O(n),因此空间复杂度是 O(n)O(n)