像乐视做硬件的视频网站,百度收录查询代码,营销网站建设多钱,看剧资源网站怎么做的目录问题1#xff1a;问题链接#xff1a;问题描述#xff1a;实例#xff1a;代码#xff1a;问题2#xff1a;问题链接#xff1a;问题描述#xff1a;实例#xff1a;代码#xff1a;问题3#xff1a;问题链接#xff1a;问题描述#xff1a;实例#xff1a;代…目录问题1问题链接问题描述实例代码问题2问题链接问题描述实例代码问题3问题链接问题描述实例代码问题4问题链接问题描述实例代码问题5问题链接问题描述实例代码问题6问题链接问题描述实例代码问题7问题链接问题描述实例代码问题8问题链接问题描述实例代码问题9问题链接问题描述实例代码问题10问题链接问题描述实例代码问题1问题链接111. 二叉树的最小深度问题描述给定一个二叉树找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明叶子节点是指没有子节点的节点。实例代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val0, leftNone, rightNone):# self.val val# self.left left# self.right rightclassSolution:defminDepth(self,root:Optional[TreeNode])-int:#1.从底层向上递归ifrootisNone:return0ifroot.rightisNone:returnself.minDepth(root.left)1ifroot.leftisNone:returnself.minDepth(root.right)1returnmin(self.minDepth(root.left),self.minDepth(root.right))1# Definition for a binary tree node.# class TreeNode:# def __init__(self, val0, leftNone, rightNone):# self.val val# self.left left# self.right rightclassSolution:defminDepth(self,root:Optional[TreeNode])-int:#2.从顶向下ansinfdefdfs(node:Optional[TreeNode],cnt:int)-None:ifnodeisNone:returncnt1ifnode.leftisNoneandnode.rightisNone:nonlocalans ansmin(ans,cnt)returndfs(node.left,cnt)dfs(node.right,cnt)dfs(root,0)returnansifrootelse0问题2问题链接112. 路径总和问题描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径这条路径上所有节点值相加等于目标和 targetSum 。如果存在返回 true 否则返回 false 。 叶子节点 是指没有子节点的节点。实例代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val0, leftNone, rightNone):# self.val val# self.left left# self.right rightclassSolution:defhasPathSum(self,root:Optional[TreeNode],targetSum:int)-bool:ifrootisNone:returnFalsetargetSum-root.valifroot.leftisNoneandroot.rightisNone:returntargetSum0returnself.hasPathSum(root.left,targetSum)orself.hasPathSum(root.right,targetSum)问题3问题链接113. 路径总和 II问题描述给你二叉树的根节点 root 和一个整数目标和 targetSum 找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。实例代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val0, leftNone, rightNone):# self.val val# self.left left# self.right rightclassSolution:defpathSum(self,root:Optional[TreeNode],targetSum:int)-List[List[int]]:#利用先序遍历实现根、左、右res,path[],[]defrecur(root,tar):ifnotroot:returnpath.append(root.val)tar-root.valiftar0andnotroot.leftandnotroot.right:res.append(list(path))recur(root.left,tar)recur(root.right,tar)path.pop()#向上回溯recur(root,targetSum)returnres问题4问题链接114. 二叉树展开为链表问题描述给你二叉树的根结点 root 请你将它展开为一个单链表 展开后的单链表应该同样使用 TreeNode 其中 right 子指针指向链表中下一个结点而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。实例代码classSolution:defflatten(self,root:Optional[TreeNode])-Optional[TreeNode]:ifrootisNone:returnNoneleft_tailself.flatten(root.left)right_tailself.flatten(root.right)ifleft_tail:left_tail.rightroot.right# 左子树链表 - 右子树链表root.rightroot.left# 当前节点 - 左右子树合并后的链表root.leftNonereturnright_tailorleft_tailorroot问题5问题链接115. 不同的子序列问题描述给你两个字符串 s 和 t 统计并返回在 s 的 子序列 中 t 出现的个数。 测试用例保证结果在32位有符号整数范围内。实例示例1 输入srabbbit,trabbit 输出3解释 如下所示,有3种可以从 s 中得到 rabbit 的方案。 rabbbit rabbbit rabbbit 示例2 输入sbabgbag,tbag 输出5解释 如下所示,有5种可以从 s 中得到 bag 的方案。 babgbag babgbag babgbag babgbag babgbag代码classSolution:defnumDistinct(self,s:str,t:str)-int:cache# 缓存装饰器避免重复计算 dfs 的结果一行代码实现记忆化defdfs(i:int,j:int)-int:ifij:return0ifj0:return1resdfs(i-1,j)# 删除 s[i]ifs[i]t[j]:resdfs(i-1,j-1)# 不删 s[i]和 t[j] 匹配returnresreturndfs(len(s)-1,len(t)-1)classSolution:defnumDistinct(self,s:str,t:str)-int:n,mlen(s),len(t)ifnm:return0f[[1][0]*mfor_inrange(n1)]fori,xinenumerate(s):forjinrange(max(m-ni,0),min(i1,m)):f[i1][j1]f[i][j1]ifxt[j]:f[i1][j1]f[i][j]returnf[n][m]问题6问题链接116. 填充每个节点的下一个右侧节点指针问题描述给定一个 完美二叉树 其所有叶子节点都在同一层每个父节点都有两个子节点。二叉树定义如下 struct Node{int val;Node*left;Node*right;Node*next;}填充它的每个 next 指针让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点则将 next 指针设置为 NULL。 初始状态下所有 next 指针都被设置为 NULL。实例代码 # Definition for a Node. class Node: def __init__(self, val: int 0, left: Node None, right: Node None, next: Node None): self.val val self.left left self.right right self.next next classSolution:defconnect(self,root:Optional[Node])-Optional[Node]:#3.BFS链表currootwhilecur:nxtdummyNode()whilecur:ifcur.left:nxt.nextcur.left# 下一层的相邻节点连起来nxtcur.leftifcur.right:nxt.nextcur.right# 下一层的相邻节点连起来nxtcur.right curcur.next#当前层链表的下一个节点curdummy.next#下一层链表的头节点returnroot # Definition for a Node. class Node: def __init__(self, val: int 0, left: Node None, right: Node None, next: Node None): self.val val self.left left self.right right self.next next classSolution:defconnect(self,root:Optional[Node])-Optional[Node]:#1.DFSpre[]defdfs(node:Node,depth:int)-None:ifnodeisNone:returnifdepthlen(pre):#node是这一层的最左边的节点pre.append(node)else:#pre[depth]是node左边的节点pre[depth].nextnode#这里是是让next指向右边那个元素pre[depth]node#这里是更新数组dfs(node.left,depth1)dfs(node.right,depth1)dfs(root,0)#根节点深度为0returnroot # Definition for a Node. class Node: def __init__(self, val: int 0, left: Node None, right: Node None, next: Node None): self.val val self.left left self.right right self.next next classSolution:defconnect(self,root:Optional[Node])-Optional[Node]:#2.BFSifrootisNone:returnNoneq[root]whileq:#pairwise它表示的是一个迭代器有点废话itertools里面都是各种迭代器他的含义是从对象中获取连续的重叠对。forx,yinpairwise(q):x.nexty tempq q[]fornodeintemp:ifnode.left:q.append(node.left)ifnode.right:q.append(node.right)returnroot问题7问题链接117. 填充每个节点的下一个右侧节点指针 II问题描述给定一个二叉树 struct Node{int val;Node*left;Node*right;Node*next;}填充它的每个 next 指针让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点则将 next 指针设置为 NULL 。 初始状态下所有 next 指针都被设置为 NULL 。实例代码 # Definition for a Node. class Node: def __init__(self, val: int 0, left: Node None, right: Node None, next: Node None): self.val val self.left left self.right right self.next next classSolution:defconnect(self,root:Node)-Node:currootwhilecur:nxtdummyNode()# 下一层的链表whilecur:# 遍历当前层的链表ifcur.left:nxt.nextcur.left# 下一层的相邻节点连起来nxtcur.leftifcur.right:nxt.nextcur.right# 下一层的相邻节点连起来nxtcur.right curcur.next# 当前层链表的下一个节点curdummy.next# 下一层链表的头节点returnroot # Definition for a Node. class Node: def __init__(self, val: int 0, left: Node None, right: Node None, next: Node None): self.val val self.left left self.right right self.next next classSolution:defconnect(self,root:Node)-Node:#2.BFSifrootisNone:returnNoneq[root]whileq:# 从左到右依次连接forx,yinpairwise(q):x.nexty# 准备下一层的节点tmpq q[]fornodeintmp:ifnode.left:q.append(node.left)ifnode.right:q.append(node.right)returnroot # Definition for a Node. class Node: def __init__(self, val: int 0, left: Node None, right: Node None, next: Node None): self.val val self.left left self.right right self.next next classSolution:defconnect(self,root:Node)-Node:ifrootisNone:returnNoneq[root]whileq:# 从左到右依次连接forx,yinpairwise(q):x.nexty# 准备下一层的节点tmpq q[]fornodeintmp:ifnode.left:q.append(node.left)ifnode.right:q.append(node.right)returnroot问题8问题链接118. 杨辉三角问题描述实例示例1:输入:numRows5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例2:输入:numRows1输出:[[1]]代码classSolution:defgenerate(self,numRows:int)-List[List[int]]:c[[1]*(i1)foriinrange(numRows)]foriinrange(2,numRows):forjinrange(1,i):c[i][j]c[i-1][j-1]c[i-1][j]returnc问题9问题链接119. 杨辉三角 II问题描述实例示例1:输入:rowIndex3输出:[1,3,3,1]示例2:输入:rowIndex0输出:[1]示例3:输入:rowIndex1输出:[1,1]代码MX34c[[1]*(i1)foriinrange(MX)]foriinrange(2,MX):forjinrange(1,i):# 左上方的数 正上方的数c[i][j]c[i-1][j-1]c[i-1][j]classSolution:defgetRow(self,rowIndex:int)-List[int]:returnc[rowIndex]问题10问题链接120. 三角形最小路径和问题描述给定一个三角形 triangle 找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标1的两个结点。也就是说如果正位于当前行的下标i那么下一步可以移动到下一行的下标i或i1。实例示例1 输入triangle[[2],[3,4],[6,5,7],[4,1,8,3]]输出11解释如下面简图所示2346574183自顶向下的最小路径和为11即235111。 示例2 输入triangle[[-10]]输出-10代码classSolution:defminimumTotal(self,triangle:List[List[int]])-int:nlen(triangle)cachedefdfs(i:int,j:int)-int:ifin-1:returntriangle[i][j]returnmin(dfs(i1,j),dfs(i1,j1))triangle[i][j]returndfs(0,0)classSolution:defminimumTotal(self,triangle:List[List[int]])-int:nlen(triangle)f[[0]*(i1)foriinrange(n)]f[-1]triangle[-1]foriinrange(n-2,-1,-1):forj,xinenumerate(triangle[i]):f[i][j]min(f[i1][j],f[i1][j1])xreturnf[0][0]