标签:right return dfs 生成 括号 tl NO.22 append
# 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]
标签:right,return,dfs,生成,括号,tl,NO.22,append 来源: https://www.cnblogs.com/158-174/p/16470712.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。