Leecode hot100 - 22. 括号生成
题目描述
https://leetcode.cn/problems/generate-parentheses/description/?envType=problem-list-v2&envId=2cktkvj
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1 输出:["()"]
提示:
1 <= n <= 8
思路
所有可能,所有结果,想到回溯
回溯 + 组合型
枚举当前位置填左括号还是右括号
从2n个位置中选n个位置放左括号,其余放右括号
选,放左括号;不选,放右括号
代码
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
m = n*2
res = []
path = [''] * m
# i是当前的位置,open是左括号的位置
def dfs(i, open):
# 先写递归结束的条件
if i == m:
res.append(''.join(path))
return
# 当左括号的数量还没达到一半时
if open < n:
path[i] = '('
dfs(i+1, open+1)
# 当右括号数量小于左括号时
if i - open < open:
path[i] = ')'
dfs(i+1, open)
dfs(0, 0)
return res
复杂度分析
空间复杂度:O(n)。返回值的空间不计入。