Leetcode 22.括号生成
1 题目描述(Leetcode题目链接)
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
2 题解
深度优先搜索比较容易思考,递归中判断两种情况:
- 如果当前左括号数量小于n,则加入一个左括号;
- 如果当前左括号数量大于右括号数量,则加入一个右括号。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
retv = []
def dfs(stack, l_num, r_num):
if r_num == n:
retv.append(stack)
return
if l_num < n:
dfs(stack+"(", l_num + 1, r_num)
if l_num > r_num:
dfs(stack+")", l_num, r_num + 1)
dfs("", 0, 0)
return retv