
递归
Jiale685
幸福并不是男子汉所该追求的
展开
-
【LeetCode】124. Binary Tree Maximum Path Sum 解题报告(Python)
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 输出: 42解题思路:递归,涉及到树的题目一般采用递归的方式。首先判断左子树的和,如果是负数就返回0然后判原创 2020-07-06 15:49:08 · 642 阅读 · 0 评论 -
【LeetCode】114. Flatten Binary Tree to Linked List 解题报告(Python)
题目分析:给定一个二叉树,原地将它展开为链表。例如,给定二叉树将其展开为:解题思路:看其展开的顺序是类似前序遍历,但是解题还是需要思路,二叉树一般可以用递归和非递归解决(1)递归变换过程 1 / \ 2 5 / \ \ 3 4 6 1 / \ 2 5 \...原创 2019-05-29 22:47:01 · 298 阅读 · 0 评论 -
【LeetCode】113. Path Sum II 解题报告(Python)
题目分析:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,返回: [[5,4,11,2],[5,8,4,5]]解题思路:这一题是【LeetCode】112. Path Sum的进阶版,比上一题要稍微难一些,但是用上一题的思路可以解决。如果根节点为空,直接返回...原创 2019-05-28 22:37:07 · 299 阅读 · 0 评论 -
【LeetCode】112. Path Sum 解题报告(Python)
题目分析:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22,返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。解题思路:根节点为空:返回Falseif not root: re...原创 2019-05-28 16:34:54 · 445 阅读 · 0 评论 -
【LeetCode】111. Minimum Depth of Binary Tree 解题报告(Python)
题目分析:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最小深度 2.解题思路:与【LeetCode】104. Maximum Depth of Binary Tree 一致,把【LeetCode】104. Maximum Dep...原创 2019-05-27 20:45:33 · 504 阅读 · 0 评论 -
【LeetCode】110. Balanced Binary Tree 解题报告(Python)
题目分析:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false 。解题思路:思路一:我们在【LeetCode】104. ...原创 2019-05-26 11:36:10 · 740 阅读 · 0 评论 -
【LeetCode】109. Convert Sorted List to Binary Search Tree 解题报告(Python)
题目分析:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:解题思路:这一题继续用【LeetCode】10...原创 2019-05-25 11:28:23 · 338 阅读 · 0 评论 -
【LeetCode】108. Convert Sorted Array to Binary Search Tree 解题报告(Python)
题目分析:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:解题思路:这一题利用二分查找与递归的思想解决,因为是把一个有序的数组转换成二叉...原创 2019-05-25 11:12:35 · 391 阅读 · 0 评论 -
【LeetCode】107. Binary Tree Level Order Traversal II 解题报告(Python)
题目分析:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],返回其自底向上的层次遍历为:[[15,7], [9,20],[3]]解题思路:这一题与【LeetCode】102. Binary Tree Level Order Traversal思路相同,就是递归中序...原创 2019-05-23 19:51:47 · 336 阅读 · 0 评论 -
【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告(Python)
题目分析:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7],后序遍历 postorder = [9,15,7,20,3]。返回如下的二叉树:解题思路:这一题与105. Construct Binary Tree from Preorder and Inorder Traversal基本完全相同...原创 2019-05-23 10:33:16 · 437 阅读 · 0 评论 -
【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告(Python)
题目分析:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出:前序遍历 preorder = [3,9,20,15,7]、中序遍历 inorder = [9,3,15,20,7]。返回如下的二叉树:解题思路:这一题我们首先需要找到构造二叉树的规律:preorder: 3 9 20 15 7inorder: 9 3 15 ...原创 2019-05-22 22:04:02 · 276 阅读 · 0 评论 -
【LeetCode】104. Maximum Depth of Binary Tree 解题报告(Python)
题目分析:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。解题思路:这一题可以用深度遍历和广度遍历解决,深度遍历采用递归,广度遍历使用队列的思想。这一题可以说是一个非常经典的递归题目。提交代码1:(深度遍历,递归...原创 2019-05-21 16:44:21 · 566 阅读 · 3 评论 -
【LeetCode】103. Binary Tree Zigzag Level Order Traversal 解题报告(Python)
题目分析:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]解题思路:、这一题本质还是遍历,使用递归进行遍历。关键就是用一个变量去储存当前层数res[level].append(roo...原创 2019-05-21 11:28:53 · 967 阅读 · 0 评论 -
【LeetCode】102. Binary Tree Level Order Traversal 解题报告(Python)
题目分析:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:[[3],[9,20],[15,7]]解题思路:这一题的本质还是遍历,使用递归进行遍历。关键就是用一个变量去储存当前层数res[level].append(root.val) 。提交代码:(递归,Runti...原创 2019-05-20 23:55:26 · 378 阅读 · 0 评论 -
【LeetCode】101. Symmetric Tree 解题报告(Python)
题目分析:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:解题思路:这一题的本质还是遍历,对于树的遍历可使用递归或者栈。提交代码1:(递归,Runtime: 40 ms, faster than 99.14% )class Solution: def...原创 2019-04-26 16:31:13 · 542 阅读 · 0 评论 -
【LeetCode】100. Same Tree 解题报告(Python)
题目分析:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:输出: true示例 2:输入:输出: false解题思路:这一题的本质还是遍历,我用的递归遍历去判断是否相同,我想栈应该也能解决,但是本题递归效率还是很高的,所以用递归解决问题。提交代码:(递归,Runtime: 36 ms, fas...原创 2019-04-25 16:18:57 · 379 阅读 · 0 评论 -
【LeetCode】99. Recover Binary Search Tree 解题报告(Python)
题目分析:二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例 1:解题思路:第一种:中序遍历将数值取出来,然后排序,然后再插入进入,使用的空间复杂度是O(n),见提交代码1。第二种:使用指针找到变动的那两个值,空间复杂度为常量见提交代码2.设置n1,n2的值用于寻找那两个点,self.n1 = TreeNode(None); self.n2 = Tree...原创 2019-04-25 16:18:36 · 396 阅读 · 0 评论 -
【LeetCode】98. Validate Binary Search Tree 解题报告(Python)
题目分析:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输出: true示例 2:解题思路:初看这一题是懵逼的,经过评论区的提醒发现核心就四个字:中序遍历,对于一个搜索树中序遍历为升序,这样我们就可以把问题转化为...原创 2019-04-23 22:57:45 · 327 阅读 · 0 评论 -
【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)
题目分析:给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:解题思路:这一题可以用递归或递归+动态规划解,我们先说递归帮助理解,这一...原创 2019-04-19 22:22:37 · 471 阅读 · 0 评论 -
【LeetCode】96. Unique Binary Search Trees 解题报告(Python)
题目分析:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3,输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:解题思路:对于一点i,当其为根节点时,左子树的节点的个数为i-1,(为1,…i-1),右子树的个数为n-i(为,i+1,…n)。对一个根来说,唯一二叉树的个数为左子树结点的个数乘以右子树的个数。而根节点可以从1到n 中选择...原创 2019-04-18 16:56:08 · 520 阅读 · 0 评论 -
【LeetCode】94. Binary Tree Inorder Traversal 解题报告(Python)
题目分析:给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]解题思路:遍历二叉树我们可以选择使用递归或者栈的方式解决递归,我们只需要判断当前节点不为None,就接着把左节点进入递归,左节点进入完毕,我们就输出,当前节点值,然后把右节点进入递归。(这与中序遍历思想相同)参考博客1栈,我们把左节点压入栈,左节点压入完毕,我...原创 2019-04-18 11:02:09 · 492 阅读 · 0 评论 -
【LeetCode】93. Restore IP Addresses 解题报告(Python)
题目分析:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]解题思路:这一题与【LeetCode】91. Decode Ways 非常相似,那个是翻译成字母这个翻译成ip,本质是相同的,那个题让求的是有几种方案而不需要求出具体样式,一般涉及字符串求几...原创 2019-04-17 17:49:25 · 438 阅读 · 0 评论 -
【LeetCode】91. Decode Ways 解题报告(Python)
题目分析:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1,B’ -> 2, … ,‘Z’ -> 26。给定一个只包含数字的非空字符串,请计算解码方法的总数。如:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。解题思路:把这个题可以分解为几种小问题进行解决,一般涉及字符串求几种情况,或者最优情况便可用动态规划...原创 2019-04-16 13:15:58 · 454 阅读 · 0 评论 -
【LeetCode】90. Subsets II 解题报告(Python)
题目分析:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。如:输入: [1,2,2]输出: [[2],[1],[1,2,2],[2,2],[1,2],[]]解题思路:(两种解法)一、这个题可以按照【LeetCode】78. Subsets的方法一递归解决(加一个当前元素是否在res里面的判断),过程及其思路请参考【LeetCo...原创 2019-04-16 00:09:02 · 255 阅读 · 0 评论 -
【LeetCode】89. Gray Code 解题报告(Python)
题目分析:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。如:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 01...原创 2019-04-16 00:08:03 · 352 阅读 · 0 评论 -
【LeetCode】87. Scramble String 解题报告(Python)
题目分析:这个题目比较难理解,说是给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。下图是字符串 s1 = “great” 的一种可能的表示形式。在扰乱这个字符串的过程中,我们可以挑选任何一个非叶节点,然后交换它的两个子节点。例如,如果我们挑选非叶节点 “gr” ,交换它的两个子节点,将会产生扰乱字符串 “rgeat” 。我们将 "rgeat” 称作 ...原创 2019-04-16 00:05:58 · 327 阅读 · 0 评论 -
【LeetCode】79. Word Search 解题报告(Python)
题目分析:这一题是给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。如:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回...原创 2019-04-07 23:55:17 · 825 阅读 · 0 评论 -
【LeetCode】78. Subsets 解题报告(Python)
题目分析:这一题是给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。如:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路:(两种解法)一、这个题可以按照【LeetCode】77. Combinations的方法递归解决(最外层多加个for),过程及其思路请参考【LeetCod...原创 2019-04-06 11:11:19 · 615 阅读 · 0 评论 -
【LeetCode】77. Combinations 解题报告(Python)
题目分析:这一题是给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。如:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]解题思路:这种题基本上是递归了,先选定一个数如[1],再往加后一位[1, 2],长度等于k了,把小列表加入res,然后return,小列表抛出最后一个2加入一个3形成[1, 3...原创 2019-04-06 10:52:02 · 731 阅读 · 0 评论 -
【LeetCode】54. Spiral Matrix 解题报告(Python)
题目分析:这一题是让我们按顺时针螺旋顺序,返回矩阵中的所有元素。如[[ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]],输出: [1,2,3,6,9,8,7,4,5]。我们可以用最基本的思路顺时针取出元素,然后形成新的二维数组进行递归,代码如下,注释很详细不再说明。测试代码:class Solution: def spiralOrder(self, matr...原创 2019-03-21 14:30:01 · 420 阅读 · 0 评论 -
【LeetCode】52. N-Queens II 解题报告(Python)
题目分析:这个题与我之前【LeetCode】51. N-Queens的解法是一致的,不过为了最后返回一个结果我们把dfs单独写出来,并建立一个self.count的对象用来记录数值。也可以看这篇进行理解Python使用元组+递归简单解决八皇后问题。测试代码:class Solution: def yesNo(self, k, j): for i in range(k)...原创 2019-03-20 10:13:35 · 395 阅读 · 0 评论 -
【LeetCode】51. N-Queens 解题报告(Python)
题目分析:这个题与我之前写的八皇后问题是基本一致的,它换了输出格式,其实用一个一维数组(元组)就能表示,比如[".Q…","…Q",“Q…”,"…Q."]可表示为[1,3,0,2]。Python使用元组+递归简单解决八皇后问题这个博客就是使用这种方法,而且注释非常详细,下面的这个代码的思路是一样的,不明白可以多看看这篇博客。测试代码:class Solution: def solve...原创 2019-03-19 23:26:53 · 691 阅读 · 0 评论 -
【LeetCode】47. Permutations II 解题报告(Python)
题目分析:这个题与【LeetCode】46. Permutations是一样的,它是上一题的升级版,上一题没有重复元素,这一题等于要先判断一下是否重复再进入递归。测试代码:class Solution: def permuteUnique(self, nums): #递归函数 def dfs(arr, point, length): ...原创 2019-03-17 11:24:12 · 457 阅读 · 0 评论 -
【LeetCode】50. Pow(x, n) 解题报告(Python)
题目分析:这个题是【LeetCode】46. Permutations升级版,上一道没有重复元素,而这一个需要除去重复元素,如果直接使用上一个的算法在递归之前加一个去重就可以了。测试代码:#submitclass Solution: def permuteUnique(self, nums): #递归函数 def dfs(arr, point, le...原创 2019-03-17 10:07:26 · 326 阅读 · 0 评论 -
【LeetCode】46. Permutations 解题报告(Python)
题目分析:这个题是数组的全排列,例如[1, 2, 3]我们是怎么产生全排列的呢,其实就是固定一个数,让其他两个数交换位置,对于超过三个的就是固定一个动后面的,后面的也是一样先固定一个,所以这个题目可以用递归解决。测试代码:class Solution: def permute(self, nums): #递归函数 def dfs(arr, point,...原创 2019-03-17 09:48:38 · 576 阅读 · 0 评论 -
【LeetCode】40. Combination Sum II 解题报告(Python)
题目分析:这个题题目是让找不重复列表中可以组成目标值的所有组合,其中每个列表元素都只在当前组合中使用一次。他与【LeetCode】39. Combination Sum是非常相似的。不同是列表中的元素只能用一次,我们只需要想办法加上这个限定就可以了。代码中已有明确注释,不在累述。测试代码:class Solution: def combinationSum2(self, candid...原创 2019-03-13 08:53:57 · 449 阅读 · 0 评论 -
【LeetCode】39. Combination Sum 解题报告(Python)
题目分析:这个题题目是让找不重复列表中可以组成目标值的所有组合,其中每个列表元素都能使用无限次。首先我是非常头大,仔细想想这个非常类似凑硬币,列表就是硬币面值,目标就是要凑出的金额。唯一不同是凑硬币是找最优解,这个是找所有解,我们可以建立一个list取存储解。代码中已有明确注释,不在累述。测试代码:class Solution: def combinationSum(self, ca...原创 2019-03-13 08:44:45 · 846 阅读 · 0 评论 -
【LeetCode】37. Sudoku Solver 解题报告(Python)
题目分析:这一题很容易想到八(N)皇后问题,而且判断是否成立可以借用【LeetCode】36. Valid Sudoku题的方法。这样我们使用双循环找一个为值’.‘的位置循环换成1-9,判断换前与还后都成立就标记为True,否则还至为’.’。测试代码:class Solution: def solveSudoku(self, board): def isValid(x...原创 2019-03-12 14:08:13 · 1665 阅读 · 0 评论 -
递归求解卡特兰数(类似斐波那锲数列)
令h(0)=1,h(1)=1,卡塔兰数满足递归式:h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2),这是n阶递推关系;还可以化简为1阶递推关系: 如h(n)=(4n-2)/(n+1)*h(n-1)(n>1),h(0)=1class Solution: def catalan(self, n):...原创 2019-03-02 14:03:54 · 1418 阅读 · 0 评论 -
【LeetCode】22. Generate Parentheses 解题报告(Python)
题目分析:这一题是让输入正整数n表示n对括号,然后输出括号所有匹配数,与【LeetCode】17. Letter Combinations of a Phone Number是有些相似的,因为可能的情况很多用循环没法解决,这时候考虑递归或动态规划,递归的代码比较简单,用递归便可解决。代码说明:1、def dfs(res, string, n, l, r):,递归函数的参数意义分别为,返回用的...原创 2019-03-02 10:21:23 · 542 阅读 · 0 评论