NO.22 括号生成
# dfs的遍历 class Solution: def generateParenthesis(self, n: int) -> List[str]: if n <= 0: return [] # 特例判断 res = [] #设置返回列表 def dfs(paths, left, right): #构造dfs函数进行遍历 if left > n or right > left or right >n: return #出循环条件 if len(paths) == n * 2: # 因为括号都是成对出现的 res.append(paths) return dfs(paths + '(', left + 1, right) # 生成一个就加一个 dfs(paths + ')', left, right + 1) dfs('', 0, 0) return res
总结一下本道回溯算法题: 首先明确限制条件,n对括号那么最多n个'(',n个')',且要成为成对的括号 因此需要满足俩个条件,插入数量不超过n,插入右括号的前提是左括号更多 设置俩个变量path-保存走过的路径和res-返回最后的结果 进行初始化dfs('',0,0)
#动态规划 #思路:如果有一组,则为'()',那n组拆分后为'('+p+')'+q,其中p+q+1==n,p与q呈线性关系 class Solution: def generateParenthesis(self, n: int) -> List[str]: if n==0:return [] tl = [] tl.append([None])# 0组括号记为None tl.append(['()'])# 1组括号记为'()' for i in range(2,n+1): # p组数目范围为(2,n),列表左闭右开 t = [] # 设置空列表记录括号情况 for j in range(i): #q组数目范围为(0,p-1) l1 = tl[j]# p=j的括号情况 l2 = tl[i-1-j] # q=i-1-p的括号情况 for k1 in l1: # 遍历l1和l2的情况 for k2 in l2: if k1 == None: k1 = "" if k2 == None: k2 = "" el = "(" + k1 + ")" + k2 t.append(el) # 把所有可能的情况添加到 t 中 tl.append(t) # t这个list就是i组括号的所有情况,添加到tl中,继续求解i=i+1的情况 return tl[n]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)