- 回溯法:
回溯法是一种递归的方法,用于生成所有可能的有效括号组合。基本思路是从空字符串开始,每次尝试添加左括号或右括号,但添加右括号的条件是它不会破坏有效性。可以使用一个计数器来跟踪当前左括号和右括号的数量,以及一个结果列表来保存所有有效的括号组合。
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
- 动态规划法:
动态规划法可以通过利用子问题的解来构建大问题的解。在这个问题中,我们可以使用动态规划来生成有效的括号组合。具体步骤如下:
- 定义一个动态规划数组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]
- 广度优先搜索法:
广度优先搜索(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