![](https://img-blog.csdnimg.cn/202010012058295.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Leetcode解题思路(C++实现)
文章平均质量分 57
记录自己的力扣解题思路,使用语言:Cpp。
MegaBytes
一只刚刚入门的小猿
展开
-
LeetCode 20. 有效的括号
描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:原创 2021-04-11 19:40:41 · 85 阅读 · 0 评论 -
LeetCode 76. 最小覆盖子串
描述给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。示例1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例2:输入:s = “a”, t = “a”输出:“a”提示:1 <= s.length, t.length <= 10^5s 和 t 由英文字母组成原创 2021-04-11 19:18:16 · 118 阅读 · 1 评论 -
LeetCode 92. 反转链表 II
描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL思路此题和第206.反转链表差不多,只不过变成了反转其中的某一段链表,当m为1,n为链表长度时就是一样的题了。206.反转链表可以使用双指针迭代法和递归法解决这道题用双指针迭代法比较简单,如果使用递归的原创 2021-03-01 20:23:49 · 98 阅读 · 0 评论 -
LeetCode 124. 二叉树中的最大路径和
描述思路解答class Solution {public: int MIN_VALUE = -2147483648; int maxVal = MIN_VALUE; int recurrence(TreeNode* root){ if(root == nullptr) return 0; int maxL = max(recurrence(root->left), 0); int maxR = max(recurrence原创 2021-02-25 20:37:51 · 291 阅读 · 0 评论 -
LeetCode 112. 路径总和
描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例2:输入:root = [1,2,3], targetSum = 5输出:false示例3:输入:root =原创 2021-02-24 19:32:33 · 97 阅读 · 0 评论 -
LeetCode 121、122、123、188、309、714. 买卖股票的最佳时机(及Ⅱ、Ⅲ、Ⅳ、含冷冻期、含手续费)
LeetCode 121.买卖股票的最佳时机描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。...原创 2021-02-04 21:48:00 · 137 阅读 · 0 评论 -
LeetCode 4. 寻找两个正序数组的中位数
描述给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?提示:nums1.length == mnums2.length == n0 <= m <= 10000 <= n <= 10001 <= m + n <= 2000-10^6 <= nums1[i], nums2[i] <=原创 2021-01-08 17:06:33 · 230 阅读 · 0 评论 -
LeetCode 215. 数组中的第K个最大元素
描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。思路这道题最直白的方法就是把数组排个序,很容易就找到第k大的数字。当然呢直接调用库函数最简单:sort(nums.begin(), nums.end(), greater<int>());,但是毕竟这道题这样太简单了,还是手写一个快排吧。在快排时要注意一点,因为快排本质上是分治,类似于原创 2021-01-05 14:25:18 · 548 阅读 · 1 评论 -
LeetCode 169.多数元素
描述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。思路1:摩尔投票法在看答案之前,没听说过还有“摩尔投票法”这个神奇的方法,原来题述强调众数个数大于总个数的一半是有原因的。摩尔投票法即:每次选一个数作为暂时的众数tmpNum,定义变量count计数,初始值为0,从当前数后面开始看,碰原创 2021-01-04 21:37:17 · 69 阅读 · 0 评论 -
LeetCode 37. 解数独
描述编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。一个数独。答案被标成红色。提示:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。思路这道题做了一天没解出来…哎,好难,最终还是看了答案。解数独是原创 2021-01-01 18:50:36 · 88 阅读 · 0 评论 -
LeetCode 90. 子集 II
描述给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。思路这道题对照着第78题.子集来看,只不过将无重复数字换成了有重复数字。按照78题的做法,只要做些许更改即可。首先需要对原nums数组进行排序,将重复元素挨到一起后有利于迭代过程中进行剪枝。还是按照上题的思路,每次取res结果中的每个元素,将其加入nums[i]变成新子集后加入到res中。但是当碰到重复元素时,就不能这样做了,因为重复元素在此元素第一次出现的时候已经形成过部分组合原创 2020-12-30 10:51:49 · 60 阅读 · 0 评论 -
LeetCode 78. 子集
描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。思路这道题虽然放在回溯标签里,但是用迭代好像更容易些。这个做法是我在评论里看到的,思路很简单,每次考虑nums数组里的一个数,将其加入到已有的结果中。首先新建一个包含空集的容器res,现在开始考虑数组的第0个数,遍历res数组的每一个元素,将nums[0]添加进去。然后考虑数组的第1个元素,遍历res数组,将nums[1]填进去… 如此一直遍历到nums的最后一个元素。解答cl原创 2020-12-28 20:02:18 · 58 阅读 · 0 评论 -
LeetCode 47. 全排列 II
描述给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。思路这道题比第46题.全排列难度增大,在46题中,使用了一个map记录第i个位置的数是否已经使用过。但是对于有重复数字的序列来说,这样做会输出重复的数。因为[1,1,2]的遍历中,前两个1调换顺序输出结果是一样的,所以要拿到正确结果,要么在此基础上对结果进行去重;要么在算法执行过程中判断是否有重复数字,有则跳过此次选择。对数组排序后,相同的数字会挨在一起。如果第i个数和第i-1个数相等,且第i-1个数未使用过(标原创 2020-12-27 21:48:15 · 92 阅读 · 0 评论 -
LeetCode 40. 组合总和 II
描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。思路这道题只需要在第39题.组合总和的基础上增加两行代码,修改一处代码即可。数组中的每个数只能用一次,且不能有重复的序列,即在[10,1,2,7,6,1,5]这个数组中,不能出现[1,2,5]和[2,1,5]这种情原创 2020-12-27 16:42:20 · 52 阅读 · 0 评论 -
LeetCode 77. 组合
描述给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。思路这道题和第39题.组合总和差不多,比39题还简单,在39的基础上改动一下代码就可以了。这道题本质上也是求1~n的全排列,结果中不包含自身的全排列。不多赘述,回溯算法的代码一看就懂。解答class Solution {public:vector<vector<int> > res;vector<int> v_tmp;int K, N; vector<vec原创 2020-12-27 13:19:23 · 67 阅读 · 0 评论 -
LeetCode 39. 组合总和
描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。思路乍一看,有点类似于背包问题中的凑硬币总额的问题。但有一点不一样,如果看成是凑硬币问题,这道题不是求最少多少枚硬币可以凑出某金额,而是求凑出某金额的所有可能情况。类似于全排列问题,从前往后遍历每一个数,每原创 2020-12-27 11:37:31 · 62 阅读 · 0 评论 -
LeetCode 46. 全排列
描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。思路1.这道题比电话号码那道简单得多,就是求给定的一串数字的全排列。直接上回溯算法的模板:result = []void backtrack(): if (满足结束条件) result.add(路径); return; for 选择 in 选择列表: 做选择; backtrack(); 撤销选择;2.需要设置一个用于标记nu原创 2020-12-26 20:55:59 · 55 阅读 · 0 评论 -
LeetCode 17. 电话号码的字母组合
描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。思路这道题不太难,因为不需要考虑不合法的情况。这道题类似于数学中的全排列问题,输入有几个字符,也就是按了几下键盘,结果中的每个字符串就多长。最终的结果是字符0对应的字母长度乘上字符1对应的字母长度乘上字符2对应的…即:按了234三个键,每个键对应3个字母,最终有333种结果。这是一个深度优先遍历的过程。首先建立一个map,保存每个数字代表的字符串原创 2020-12-26 19:36:40 · 88 阅读 · 0 评论 -
LeetCode 22. 括号生成
描述数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。思路1.首先肯定能想到暴力穷举的方式:一共有n对括号,即2n个位置,每个位置都有两种括号选择,一共有2的2n次方种情况,枚举完之后再排除不符合的情况。这样时间复杂度会很高。2.回溯法:回溯法对暴力穷举进行了剪枝,对于某次尝试,若不符合规则,直接返回,不再继续尝试。设置两个变量对左括号和右括号进行计数,若左括号数小于n,则优先放置左括号,当左括号数等于n时不再继续放置,而是放置右括号。每次都要保原创 2020-12-26 15:38:42 · 72 阅读 · 0 评论 -
LeetCode 51. N 皇后(经典回溯问题)
描述n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。提示:皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。思路题述里最后输出的是一个一维数组,其中每个数组元素是一个vector,代表了一张棋盘。原创 2020-12-25 21:00:35 · 309 阅读 · 0 评论 -
LeetCode 198. 打家劫舍
描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。思路开始考虑DP的三要素:初始值、选择、状态转移方程。1.定义dp数组的含义为:在只考虑前i(i从0开始)间房子的情况下,一夜所能偷到的最大金额。(这里0 <= i <= size-1原创 2020-12-24 16:55:47 · 64 阅读 · 1 评论 -
动态规划之《高楼扔鸡蛋》问题详解 && LeetCode 887.鸡蛋掉落
描述这是LeetCode的第887题。题目如下:你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。你的目标是确切地知道 F 的值是多少。无原创 2020-11-22 22:38:04 · 3701 阅读 · 0 评论 -
LeetCode 72. 编辑距离
描述给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 =原创 2020-11-21 21:19:35 · 78 阅读 · 0 评论 -
LeetCode 516. 最长回文子序列
描述给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:“bbbab”输出:4一个可能的最长回文子序列为 “bbbb”。示例 2:输入:“cbbd”输出:2一个可能的最长回文子序列为 “bb”。提示:1 <= s.length <= 1000s 只包含小写英文字母思路还是用动态规划,枚举所有情况。dp[i][j]定义为字符串s的第i个字符到第j个字符之间最长的回文子序列长度原创 2020-11-18 19:08:05 · 321 阅读 · 0 评论 -
LeetCode 1143. 最长公共子序列
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = “abcde”, text2 = “a.原创 2020-11-14 11:07:15 · 90 阅读 · 0 评论 -
LeetCode 416. 分割等和子集(0-1背包问题变形)
描述给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.思路本题是0-1背包问题的一个变形。首先,若数组中的数总和sum为奇数,那么肯定不能分原创 2020-11-12 20:11:52 · 117 阅读 · 0 评论 -
LeetCode 518. 零钱兑换 II(完全背包问题变形)
描述给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount = 10, coins = [1原创 2020-11-12 19:04:23 · 174 阅读 · 0 评论 -
LeetCode 300. 最长上升子序列
描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(nlogn) 吗?思路直接上手动态规划的三要素:动态规划数组含义:dp[i]定义为以nums[i]结尾的最长上升子序列的长度,注意这原创 2020-11-09 10:37:59 · 43 阅读 · 0 评论 -
LeetCode 322. 零钱兑换
描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0输出:0示原创 2020-11-08 22:12:12 · 63 阅读 · 0 评论 -
64. 最小路径和
描述给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路动态规划。和第62题类似的地图,但这次要求的是路径和最小的值是多少。和它同样的思路,dp数组表示的就是在第[i][j]位置的最小路径和的值。要到达第[i][j]个格子有两种方案,从第[i-1][j]个格子原创 2020-11-08 21:31:55 · 69 阅读 · 0 评论 -
62. 不同路径
描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右原创 2020-11-08 21:20:52 · 76 阅读 · 0 评论 -
70. 爬楼梯
描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶思路一道简单的动态规划问题。从第n个台阶开始考虑:第n个台阶只能由第n-1个或第n-2个台阶原创 2020-11-08 19:49:10 · 266 阅读 · 0 评论 -
509. 斐波那契数
描述斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1.示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2.原创 2020-11-08 19:29:01 · 93 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释:原创 2020-11-04 22:33:08 · 68 阅读 · 0 评论 -
617. 合并二叉树
描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。注意: 合并必须从两个树的根节点开始。思路将两棵树叠加到t1、t2中的一棵树中。若t1的左孩子为空,则直接让其左孩子等于t2的左孩子;若t1的右孩子为空,则让其右孩子等于t2的右孩子。递归的出口:当t1、t2中有一个为空时则返回。最终的原创 2020-11-03 21:36:48 · 84 阅读 · 0 评论 -
226. 翻转二叉树
描述翻转一棵二叉树。备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。思路按照《从三道LeetCode例题总结递归套路,解决递归问题》,,将二叉树抽象为只有一个root结点和其左右孩子的树,按步骤分析:递归的出口:当root结点为空时,递归结束应该返回什么信息:这道题要返回的是被交换过后的子树。本级递归需要做什么:需要交换root结点的左原创 2020-11-01 16:34:46 · 72 阅读 · 0 评论 -
24. 两两交换链表中的节点
描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100思路按照博客:《从三道LeetCode例题总结递归套路,解决递归问题》的套路,总体思路如下图:下面开始考虑递归套路的三个步骤:递归出口:什么时候递归需要结束?当head结点是空或者head->next结点为空时,即没有结点或只有一个结点时。返回值:返原创 2020-11-01 13:26:55 · 63 阅读 · 0 评论 -
从三道LeetCode例题总结递归套路,解决递归问题
递归解题三部曲何为递归?程序反复调用自身即是递归。我自己在刚开始解决递归问题的时候,总是会去纠结这一层函数做了什么,它调用自身后的下一层函数又做了什么…然后就会觉得实现一个递归解法十分复杂,根本就无从下手。相信很多初学者和我一样,这是一个思维误区,一定要走出来。既然递归是一个反复调用自身的过程,这就说明它每一级的功能都是一样的,因此我们只需要关注一级递归的解决过程即可。如上图所示,我们需要关心的主要是以下三点:整个递归的终止条件。一级递归需要做什么?应该返回给上一级的返回值是什么?因此原创 2020-10-31 23:05:31 · 370 阅读 · 1 评论 -
110. 平衡二叉树
描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。提示:树中的节点数在范围 [0, 5000] 内-10^4 <= Node.val <= 10^4思路写了半天没ac,最终看了官方题解,我的基本思路和题解的解法二:自底向上的递归一致,只是有部分地方没搞懂,所以没写出来。按照博客的递归解题思路,感觉可以按照递归的套路三步骤来写。并且此题只需要在104.二叉树的最大深度这道题的基础原创 2020-10-31 22:31:02 · 86 阅读 · 0 评论 -
111. 二叉树的最小深度
描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。提示:树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000思路和104.二叉树的最大深度差不多。每次当到达叶子结点时,判断当前层数是否小于tmpMin。结果太惨了:解答/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-10-30 20:26:17 · 142 阅读 · 0 评论