1. 回溯法:

回溯法是一种递归的方法,用于生成所有可能的有效括号组合。基本思路是从空字符串开始,每次尝试添加左括号或右括号,但添加右括号的条件是它不会破坏有效性。可以使用一个计数器来跟踪当前左括号和右括号的数量,以及一个结果列表来保存所有有效的括号组合。

def generateParenthesis(n):
    def backtrack(s, left, right):
        if len(s) == 2 * n:
            result.append(s)
            return
        if left < n:
            backtrack(s + '(', left + 1, right)
        if right < left:
            backtrack(s + ')', left, right + 1)

    result = []
    backtrack('', 0, 0)
    return result
  1. 动态规划法:

动态规划法可以通过利用子问题的解来构建大问题的解。在这个问题中,我们可以使用动态规划来生成有效的括号组合。具体步骤如下:

  • 定义一个动态规划数组dp,其中dp[i]表示i对括号可以生成的所有有效括号组合。
  • 初始化dp[0]为一个空字符串。
  • 外层循环从1到n,内层循环遍历所有可能的切分点j,将dp[j]和dp[i-j-1]的组合添加到dp[i]中。
  • 最后返回dp[n]作为结果。
def generateParenthesis(n):
    dp = [[] for _ in range(n + 1)]
    dp[0] = ['']
    for i in range(1, n + 1):
        for j in range(i):
            dp[i] += ['(' + x + ')' + y for x in dp[j] for y in dp[i - j - 1]]
    return dp[n]
  1. 广度优先搜索法:

广度优先搜索(BFS)可以用于生成有效的括号组合。我们可以维护一个队列来存储中间结果,初始时队列中只有一个空字符串。然后,我们不断从队列中取出字符串,并尝试在不破坏有效性的情况下添加左括号或右括号。当生成的字符串长度达到2n时,将其加入结果列表中。

from collections import deque

def generateParenthesis(n):
    queue = deque()
    queue.append('')
    result = []
    while queue:
        s = queue.popleft()
        if len(s) == 2 * n:
            result.append(s)
        else:
            left = s.count('(')
            right = s.count(')')
            if left < n:
                queue.append(s + '(')
            if right < left:
                queue.append(s + ')')
    return result