题目链接
题目描述
正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:输入:n = 1
输出:["()"]
提示:
1 <= n <= 8
解题思路
回溯法,当序列仍保持有效是才添加‘(’或‘)’,而不是每次添加,通过跟踪到目前为止放的左括号或右括号数量来做到
当左括号数量小于n就可以放左括号,当右括号数量小于左括号数量,就可以放右括号
代码
Python
class Solution:
def generateParenthesis(self, n: int) -> list[str]:
def backtrack(S: list[str], left: int, right: int) -> None:
if len(S) == n * 2:
ans.append(''.join(S))
return
if left < n:
S.append('(')
backtrack(S, left + 1, right)
S.pop()
if right < left:
S.append(')')
backtrack(S, left, right + 1)
S.pop()
ans = []
backtrack([], 0, 0)
return ans