0
点赞
收藏
分享

微信扫一扫

leetcode(力扣) 22. 括号生成 (递归)


文章目录

  • ​​题目描述:​​
  • ​​思路分析:​​
  • ​​完整代码​​

题目描述:

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

有效括号组合需满足:左括号必须以正确的顺序闭合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

思路分析:

我找了一张很不错的图。

leetcode(力扣) 22. 括号生成 (递归)_递归


一开始答案为空字符串,左括号和右括号数量都是空。

往下走,可以添加左括号,但不可以添加右括号,因为此时答案为空,其中没有左括号, 答案中左括号的数量 >= 右括号的数量。

一直这样像二叉树一样的走下去,直到左括号和右括号的数量相等且等于题目所给数值N时,将当前答案记录。

显然递归出口 :
左括号数量 = 右括号数量 = n
右括号数量大于左括号数量

完整代码

def generateParenthesis(n):
res = []
def dfs(ans,left,right):
if left == n and right == n:
res.append(ans)
return
# 在答案中的左括号数量大于右括号数量。在剩余结果中,左括号应该小于右括号数量,否则return
if right > left:
return
if left < n:
dfs(ans+'(',left+1,right)
if right < n:
dfs(ans+')',left,right+1)

dfs('',0,0)
return res

if __name__ == '__main__':
n = 2
print(generateParenthesis(n))


举报

相关推荐

0 条评论