题目 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
题解
- 使用暴力枚举的方法列出所有的生成括号的情况然后,通过判断 isvalid 来将结果添加到result中
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
def generate(A):
if len(A) == 2*n:
if valid(A):
ans.append("".join(A))
else:
A.append('(')
generate(A)
A.pop()
A.append(')')
generate(A)
A.pop()
def valid(A):
bal = 0
for c in A:
if c == '(': bal += 1
else: bal -= 1
if bal < 0: return False
return bal == 0
ans = []
generate([])
return ans
时间复杂度: O(2^2n * n)
空间复杂度:O(n)
2.
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
def generate(left, right, n, s):
if left == n and right == n:
res.append(s)
if left < n: generate(left+1, right, n, s + '(')
if right < left: generate(left, right + 1, n, s +')')
generate(0, 0, n, '')
return res
这种办法为回溯 + 剪枝的方法,通过条件排除了右括号多余左括号的情况
时间复杂度: O(N)
空间复杂度: O(N)