题目描述:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
分析:
这里应用回溯法,回溯法的要点就是,每一步都有固定的选择,如果满足限制条件,则选择深入子节点,如果不满足,则退回一步重新选择。回溯法是以深度优先的方式搜索解空间的,细节请参考GitHub讲解。
代码:
执行用时: 60 ms, 在Generate Parentheses的Python3提交中击败了38.03% 的用户
内存消耗: 13.3 MB, 在Generate Parentheses的Python3提交中击败了1.88% 的用户
class Solution:
def generateParenthesis(self, n: 'int') -> 'List[str]':
self.res = []
self.dfs("", 0, 0, n)
return self.res
def dfs(self, s, left, right, n):
if left == n and right == n:
self.res.append(s)
if left < n:
self.dfs(s + "(", left+1, right, n)
if right < left:
self.dfs(s + ")", left, right+1, n)
复杂度:
时间复杂度: O ( 4 N / s q r t ( N ) ) O(4^N / sqrt(N)) O(4N/sqrt(N)) 空间复杂度: O ( 4 N / s q r t ( N ) ) O(4^N / sqrt(N)) O(4N/sqrt(N))