好好刷leetcode
文章平均质量分 59
努力刷题,天天记录
tiger2_2
这个作者很懒,什么都没留下…
展开
-
代码随想总结
在整个两个月的时间,我的心态发生了变化,从一开始的手足无措、慌张难受到后面偶尔可以独立AC题目,慢慢建立了一定的自信心,我心态最大的改变是勇于看题解,一开始刷题总想自己想,一想想半天,挫败之后还做不出来,觉得自己脑子不灵光,但我后来意识到,很多题目是十分经典的题目,思想本来就很巧妙,想不出来是正常的,要是随随便便都能想出来,想必也不需要费力做题目了,临场发挥就行。,像长跑一样,过了最难受的那个时刻,后面会越来越游刃有余,继续加油吧!原创 2024-01-08 19:54:54 · 539 阅读 · 0 评论 -
代码随想Day57 | 647. 回文子串、516.最长回文子序列
如果不等于,则需要分别考虑,选择头元素而不选择尾元素的最长回文子序列和选择尾而不选头的两者的最大值:dp[i][j]=max(dp[i+1][j],dp[i][j-1]);如果s[i]==s[j],则用中间的最长长度+2,dp[i][j]=dp[i+1][j-1]+2;3. dp[i+1][j-1]是回文串,说明中间的字串是回文串,再加上两边两个字符,也是回文串;根据递推可以看出,需要用到左下角,下方,左方的值,因此需要从下到上,从左到右的遍历。dp[i][j]:【i,j】范围内的最长回文子序列长度;原创 2024-01-03 23:52:45 · 572 阅读 · 0 评论 -
代码随想Day55 | 392.判断子序列、115.不同的子序列
当s[i - 1] 与 t[j - 1]相等时,dp[i][j]可以有两部分组成。从递推公式dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];中可以看出dp[i][j] 是从上方和左上方推导而来,如图:,那么 dp[i][0] 和dp[0][j]是一定要初始化的。再来看dp[0][j],dp[0][j]:空字符串s可以随便删除元素,出现以j-1为结尾的字符串t的个数。dp[i][j]:以s[i-1]结尾的t[j-1]结尾的子序列个数;dp[i][0]表示什么呢?原创 2024-01-02 00:11:10 · 639 阅读 · 0 评论 -
代码随想Day56 | 583. 两个字符串的删除操作、72. 编辑距离
dp[i][0] :以下标i-1为结尾的字符串word1,和空字符串word2,最近编辑距离为dp[i][0]。那么dp[i][0]就应该是i,对word1里的元素全部做删除操作,即:dp[i][0] = i;dp[0][j]表示空字符串和第二个字符串相等的删除数,因此等于j,dp[i][0]同理;两个字符相等时,说明两个字符串都不需要删除,dp[i][j]=dp[i-1][j-1];dp[i][j]:以i-1结尾的word1和j-1结尾的word2的最小删除数;同理dp[0][j] = j;原创 2024-01-02 23:27:09 · 1301 阅读 · 0 评论 -
代码随想Day60 | 84.柱状图中最大的矩形
这道题和接雨水遥相呼应,接雨水是求外部凹槽,这道题是求内部面积,这道题的整体思路是某一个元素,找到其左边的第一个小于该数的位置,右边的第一个小于该数的位置,然后以当前索引的高度为高度,宽度是左右两个位置中间的距离,这样就可以求出以这个位置为基准的最大面积。如果数组本身是降序的,例如 [8,6,4,2],在 8 入栈后,6 开始与8 进行比较,此时我们得到 mid(8),rigt(6),但是得不到 left。因为 将 8 弹出之后,栈里没有元素了,那么为了避免空栈取值,直接跳过了计算结果的逻辑。原创 2024-01-08 19:28:54 · 822 阅读 · 0 评论 -
代码随想Day59 | 503.下一个更大元素II、42. 接雨水
这道题的思路主要就是需要确定当前元素的左边更大的元素和右遍更大的元素,思路整体和之前的相似,但是在当前元素大于栈口元素的处理逻辑,接雨水这道题目是 面试中特别高频的一道题,也是单调栈 应用的题目。这道题和 739. 每日温度 几乎如出一辙,原创 2024-01-05 23:24:38 · 532 阅读 · 0 评论 -
代码随想Day58 | 739. 每日温度、496.下一个更大元素 I
本题和 739. 每日温度 差不多,先遍历nums2,在栈内压入的元素还是下标,区别在于这道题要求输出的是第一个大于当前元素的元素,所以在记录结果的时候,需要用一个哈希表,来记录栈顶元素的第一个比其大的元素;3. 当前元素>栈顶元素:①记录距离:res[s.top()]=i-s.top();单调栈可以用来解决找到左边或者右边的第一个比当前元素更大的元素,然后进行其他操作;如果从顶到底是递减的,找的是第一个比当前元素小的元素。2. 当前元素==栈顶元素:压入栈;1. 当前元素<栈顶元素:压入栈;原创 2024-01-04 23:51:17 · 553 阅读 · 0 评论 -
代码随想Day53 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和
本题和 718. 最长重复子数组 的区别就是本题不要求连续,所以在两个字符不相等的时候,逻辑不相同,当不相同的时候,需要找到dp[i-1][j]和dp[i][j-1]之间的最大值,因为不相等的时候需要找出退而求上一个状态的两个值的最大,这样才能得到最长公共子序列数,其他的思路都和重复子数组相同,不再详细赘述。两种可能:1.dp[i-1]小于0,说明前面都是副作用,dp[i]=num[i-1];2. dp[i-1]大于0,则dp[i]=dp[i-1]+nums[i-1];初始化:dp[0]=nums[0];原创 2024-01-01 00:54:16 · 567 阅读 · 0 评论 -
代码随想Day52 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
注意,上述代码可以进行空间优化,因为dp[i][j]仅和左上角元素有关,所以可以压缩维度,把i维度压缩,运用滚动数组即可,要注意的是同01背包问题一样,为了不把数据踩踏,里层的循环需要逆向,这样就不会篡改上一层的数据导致错误。dp[i][j]:以A[i-1]为结尾和以B[j-1]为结尾的数组的最长重复子数组长度;递推:j从0-i进行对比,如果nums[i]大于nums[j],dp[i]=dp[j]+1;递推:如果两个值相等,则dp[i][j]=dp[i-1][j-1];遍历:进行两层嵌套,从前往后即可;原创 2023-12-29 20:17:54 · 626 阅读 · 0 评论 -
代码随想Day51 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
dp[i][0]:不持有股票有三种可能,分别是前一天就持有股票,前一天是保持不持有股票今天买入,以及前一天是冷冻期今天买入,取三者的最大值;只有dp[0][0]=-prices[0],其他都是0,本身状态无意义,可以通过递推公式反推出来需要的初始值。dp[i][1]:保持不持有股票的状态的两种可能:前一天就是不持有状态以及前一天是冷冻期状态;dp[i][3]:冷冻期只能是前一天卖出股票得到;dp[i][2]:卖出股票:前一天持有今天卖出;dp[1]:保持不持有股票的状态的最大金额;从i等于1开始向后;原创 2023-12-28 23:39:27 · 394 阅读 · 0 评论 -
代码随想Day46 | 139.单词拆分、背包问题总结
递推公式:如果[j-i]区间的字符在字典中,同时dp[j]为true,则dp[i]为true。dp[i]:长度为i的字符串长度,如果能被组成则dp[i]为true。这道题可以用回溯完成,也可以使用完全背包的巧妙思路。遍历顺序:本题目相当于求排列数,所以先背包再物品。初始化:dp[0]=1;原创 2023-12-24 00:29:40 · 478 阅读 · 0 评论 -
代码随想Day48 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III
2. 递推:当前位置偷:dp[i-2]+nums[i];当前位置不偷:dp[i-1];dp[i]=max(偷,不偷);3. 初始化:dp[0]=num[0], dp[1] = max(num[0],num[1]);参数:返回值应该是一个数组,分别是当前节点不偷和偷的最大值;dp[0] 当前不偷节点的最大值,dp[1]:当前偷节点的最大值。处理逻辑:先左右递归,然后再处理当前节点的逻辑。结束条件:当遍历到null节点,则最大值为0;1. dp[i]:到位置i,获得的最大金额;4. 遍历顺序:从前到后。原创 2023-12-26 00:37:05 · 746 阅读 · 0 评论 -
代码随想Day50 | 123.买卖股票的最佳时机III 、188.买卖股票的最佳时机IV
第i天第一次持有股票的最大金额是前一天的该状态和当前第一次买的最大值;第i天第二次持有股票的最大金额是前一天该状态和当前第二次买的最大值;dp[i][1]:第i天第一次不持有股票的最大金额;dp[i][3]:第i天第二次不持有股票的最大金额;dp[i][0]:第i天第一次持有股票的最大金额;dp[i][2]:第i天第二次持有股票的最大金额;第i天第一次不持有股票的最大金额是前一天该状态和。第i天第二次不持有股票的最大金额是前一天该状态和。前一天第二次持有并今天卖出的最大值。原创 2023-12-27 23:13:52 · 536 阅读 · 0 评论 -
代码随想Day49 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
dp[i][0]= max(dp[i-1][0], -price[i]) ->持有的最大利润是前一天持有和当前买的最大值,因为只能交易一次,所以如果当前买的话一定是第一次买,所以利润就是0-price[i];dp[i][1] = max(dp[i-1][1],dp[i-1][0]+price[i])->不持有的最大利润是前一天不持有和 当天卖中的最大值。因为需要表示第i天持有股票和不持有股票两种状态的最大值,dp[i][0] 第i天持有股票的最大金额;dp[i][1] 第i天不持有股票的最大金额;原创 2023-12-26 23:30:14 · 553 阅读 · 0 评论 -
代码随想Day 31 | 455.分发饼干、376. 摆动序列 、53. 最大子序和
【代码】代码随想Day 31 | 455.分发饼干、376. 摆动序列 、53. 最大子序和。原创 2023-12-08 22:21:53 · 235 阅读 · 0 评论 -
代码随想Day34 | 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
这道题我的思路就是,首先按照绝对值大小,依次把最小的负数变成正数,(第一个贪心);本题思路比较巧妙,利用的是剩余油量的逻辑,如果剩余油量的累加和小于0,说明当前走不到,下一个站点,所以要从下一站点继续尝试能否走完,巧妙地利用总油量剩余累加及当前油量剩余累加,确定是否能跑完一圈。原创 2023-12-11 23:34:20 · 380 阅读 · 0 评论 -
代码随想Day35 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
本题和分发糖果类似,处理好一边再处理另一边,具体到本道题就是先确定身高再确定第二个元素,因为先确定第二个元素的话后面又会被打乱;先确定身高从大到小,身高相同的第二个元素小的在前面;可以看出首先第一组重叠气球,一定是需要一个箭,气球3,的左边界大于了 第一组重叠气球的最小右边界,所以再需要一支箭来射气球3了。以题目示例: [[10,16],[2,8],[1,6],[7,12]]为例,如图:(方便起见,已经排序)这道题主要分析模拟遇到5 10 20的情况,在遇到20的时候会用到贪心,优先使用10和5,原创 2023-12-12 23:49:58 · 338 阅读 · 0 评论 -
代码随想Day44 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
完全背包和01背包的区别就是,完全背包的每个物品不限制使用次数,和01背包在代码上的区别只是遍历顺序,在遍历背包时需要将顺序改为正序,因为这样可以保证每个物品被使用无数次。另外完全背包的背包和物品两层循环的遍历顺序可以颠倒,因为都是用左边及上面的状态来推出当前值,只是行和列的遍历不同。这道题需要注意遍历顺序,先物品后背包,这样得到的是组合数,而先背包再物品得到的是排列数。这道题是求排列,需要把上述题目的遍历顺序颠倒一下,完成本题,另外本题有两个数相加越界的问题,需要加一个额外的约束条件。原创 2023-12-22 00:18:58 · 545 阅读 · 0 评论 -
代码随想Day42 | 背包问题、416. 分割等和子集
遍历顺序:遍历背包容量时候需要倒序,倒序可以保证每个物品只取一次,主要是dp[j]需要用到dp[j-x],正序遍历的时候前面的值已经被修改,而倒序则不被修改,相当于还是上层的值。递推:dp[j] = max(dp[j],dp[j-weight[i]]+value[i]),注意这里的dp[j]是代表不取物品i的情况;放物品i为dp[i-1][j-weight[i]]+value[i],dp[i][j]:任取[0-i]之间的物品放进容量为j的背包里的最大价值。dp[j]:背包容量为j,放入物品后的最大重量;原创 2023-12-20 01:10:28 · 578 阅读 · 0 评论 -
代码随想Day28 | 93.复原IP地址、78.子集、90.子集II
有效则把当前结束后的位置加上句点,同时句点个数+1,然后进入下一层,之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。递归结束条件:如果pointnum等于3,说明已经分为4段了,对第四段的有效性验证,有效则加入结果集合;参数:除了控制下一次开始的索引,还需要增加一个表示添加句点的个数pointnum,用来控制结束条件;子集问题,就是收集树形结构中,每一个节点的结果。注意进入下一层的索引是i+2,因为增加了一个句点。原创 2023-12-06 00:41:44 · 152 阅读 · 0 评论 -
代码随想Day37 | 738.单调递增的数字
这道题思路很巧妙,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。738.单调递增的数字。738.单调递增的数字。原创 2023-12-14 23:21:46 · 111 阅读 · 0 评论 -
代码随想Day45 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
本题 和 322. 零钱兑换 基本是一样的,要注意这里等比于上述题目的coin数组里的值是i*i(1,4,9,16...),明白这一点就能推出这道题的思路,注意这道题不存在凑不成的情况,因为完全平方数里有1这一项。这道题用完全背包的思路来做就是一个排列数,先背包在物品。dp[i]是爬到第i个台阶最多的方法数。递推公式:dp[i]+=dp[i-j];初始化dp[0]=1,因为dp[0]是整个递推的基础。dp[i]是容量为i的背包的最小物品数,dp[i]=min(dp[i-coin[j]]+1,dp[i])。原创 2023-12-22 23:31:01 · 614 阅读 · 0 评论 -
代码随想Day39 | 62.不同路径、63. 不同路径 II
这道题和上一道思路一样,但是这道有障碍物,需要注意有障碍物的索引,到达该处的路径和为0,根据这个条件,增加处理逻辑即可,整体的转移方程还是。dp[i][j]=dp[i-1][j]+dp[i][j-1],初始状态的第一行和第一列为1,从左上到右下开始遍历即可。每次向右或者向下走两个选择,定义dp数组dp[i][j] 为到达索引ij的路径和,状态转移公式为。为了优化空间复杂度,可以用一个一维数组,因为一定是先更新左边的值再更新右边的值。原创 2023-12-17 23:20:11 · 250 阅读 · 0 评论 -
代码随想Day29 | 491.递增子序列、46.全排列、47.全排列 II
本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。排列问题不能用 startIndex,因为取到后面的索引之后还可以再取前面的值,因此排列问题需要一个used数组来记录某个元素是否用过,用过时continue,否则进入下一个循环。如何去除同一层已经使用过某数的情况:需要在某一层使用哈希表,来记录状态,实现去重,因为题中规定了数的范围,也可以用数组代替哈希表,效率更高;如何判断某个子序列要继续向下递归:两种情况 1.子序列的最后一个值小于等于当前节点;2. 当前节点在这一层没有被使用过;原创 2023-12-07 00:02:47 · 280 阅读 · 0 评论 -
代码随想Day43 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
这样两堆相碰最终得到的就是做小石头重量,于是就和416很像,唯一不同的是最后的判断逻辑,最小的石头重量等于sum-dp[target]-dp[target]。这道题目的思路是分为加法的集合和减法的集合两队,然后根据题目可以求出,加法的集合的总和应该为sum+target的一半,递推公式:dp[j]=max(dp[j],dp[j-stone[i]]+stone[i]。初始化:当容量为0和0和0个1时,最多的物品是0个,dp[0][0]=0;dp[j]:容量为j的背包的最大价值,初始化:dp[0]=1。原创 2023-12-21 00:06:47 · 523 阅读 · 0 评论 -
代码随想Day41 | 343. 整数拆分、96.不同的二叉搜索树
从1遍历j,然后有两种渠道得到dp[i],一个是j * (i - j) 直接相乘,一个是j * dp[i - j],相当于是拆分(i - j)。j怎么就不拆分呢?j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。所以递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))。其余步骤省略~详细代码如下:原创 2023-12-18 22:59:01 · 636 阅读 · 0 评论 -
代码随想Day38 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
这道题和爬楼梯异曲同工,dp[i]表示从i出发所需要的最小花费,因此dp[i] = cost[i]+min(dp[i-1],dp[i-2]),最终的最小花费从倒数第一个和倒数第二个台阶选一个最小的即可。509. 斐波那契数。509. 斐波那契数。原创 2023-12-16 23:25:58 · 201 阅读 · 0 评论 -
代码随想Day36 | 435. 无重叠区间、763.划分字母区间、56. 合并区间
这道题和前一天的射箭题目思想类似,用总区间个数-不重叠的区间个数等于需要去除的区间个数。原创 2023-12-13 23:33:59 · 238 阅读 · 0 评论 -
代码随想Day32 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
这道题目没有手续费,因此手机每天的利润,可以尽可能多的买卖股票, 如果当前的股票值高于前一天就在前一天买当天卖 ,最后就可以得到最多的利润。和55题有类似,但是更难一些。移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。最后的步数就是最少步数。这里还是有个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时。原创 2023-12-09 21:49:42 · 202 阅读 · 0 评论 -
代码随想Day 27 | 39. 组合总和、40.组合总和II、131.分割回文串
为什么 used[i - 1] == false 就是同一树层呢,因为同一树层,used[i - 1] == false 才能表示,当前取的 candidates[i] 是从 candidates[i - 1] 回溯而来的。本题开始涉及到一个问题了:去重。注意题目中给我们集合是有重复元素的,那么求出来的组合有可能重复,但题目要求不能有重复组合。这道题目和组合有相似之处,但是第一次遇到比较难理解,可以用索引来表示切割的地方,这道题的剪枝不容易想到,先进行排序,这道题去重的思路比较抽象,思想来自。原创 2023-12-05 01:16:44 · 119 阅读 · 0 评论 -
代码随想Day25 | 216.组合总和III、17.电话号码的字母组合
3. 回溯具体怎么写?对每个数字对应的letter进行遍历,用一个参数index来表示目前是第几个数字;这道题目在组合的基础上做会比较容易,这道题目的不同之处在于,for循环的范围是固定的1-9,2. for循环的最大值类似于组合这道题目:i<=9-(k-path.size())+1;1. 如何表述数字到字母的映射:用数组表示;1. 累加和大于目标n,可以直接返回;2. 遇到异常输入怎么办?原创 2023-12-04 23:10:11 · 91 阅读 · 0 评论 -
代码随想Day24 | 回溯法模板、77. 组合
举个例子,n = 4,k = 3, 目前已经选取的元素为0(path.size为0),n - (k - 0) + 1 即 4 - ( 3 - 0) + 1 = 2。函数里一定有两个参数,既然是集合n里面取k个数,那么n和k是两个int型的参数。path这个数组的大小如果达到k,说明我们找到了一个子集大小为k的组合了,此时用result二维数组,把path保存起来,并终止本层递归。回溯法的搜索过程就是一个树型结构的遍历过程,在如下图中,可以看出for循环用来横向遍历,递归的过程是纵向遍历。原创 2023-12-04 22:58:27 · 358 阅读 · 0 评论 -
代码随想Day23 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
这道题目是构建二叉树,类似于之前的根据前序和中序构造二叉树的思想,但是这道题更加简单,主要的思想是构建二叉搜索树,同时还要是平衡二叉树,因此只需要每次把数组最中间的树当作根节点,左边的当作左子树,右边的当作右子树就可以构造出平衡二叉树原创 2023-12-04 22:43:08 · 129 阅读 · 0 评论 -
代码随想Day22 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
这道题目要注意,考虑清楚删除节点的五种情况, 然后在针对每一种进行删除,其中左右节点都不为空的情况比较复杂原创 2023-11-30 01:27:37 · 176 阅读 · 0 评论 -
代码随想Day21 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
但是我的思路没有用到二叉搜索树的性质,用到二叉搜索树的性质则不需要额外的空间,且一遍就可以得到众数,思路比较巧妙原创 2023-11-28 23:41:38 · 608 阅读 · 0 评论 -
代码随想day14 | 二叉树遍历
中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了。写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。迭代思路是使用栈,先压入根节点,然后pop栈,接着pop出的节点的右节点和左节点压入,循环往复。深度优先(DFS) :前序、中序、后序。原创 2023-11-21 23:49:40 · 994 阅读 · 0 评论 -
代码随想Day15 | 102层序遍历、226翻转二叉树、101对称二叉树
因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。二叉树的层序遍历需要需要用到队列,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。接着递归其左右节点,需要注意,其左右节点的层数要加1。1. 参数:相比前序中序后序遍历,需要多一个用来表示层数的参数,来把相应的元素添加到对应层;3. 每层的逻辑:首先如果层数等于res的尺寸,说明开始新的一层了,需要新增一个数组;原创 2023-11-22 23:46:50 · 470 阅读 · 0 评论 -
代码随想Day 18 | 513.找树左下角的值、112. 路径总和 113.路径总和ii、106.从中序与后序遍历序列构造二叉树
发现我的问题在于:我的回溯出了问题,因为我没有判断左节点和右节点的合理性,所以会出现加入左节点等于null时,回溯停止,但是依据上述代码,path多pop了一个元素,所以要改正代码,需要把push和pop进行配对出现原创 2023-11-26 21:04:37 · 297 阅读 · 1 评论 -
代码随想Day 16 | 104.二叉树的最大深度 559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
这种思路可以不用遍历每一个节点,有效的减少复杂度。3. 单层处理逻辑:用后序遍历,先得到左节点的最大深度,再得到右节点的最大深度,则当前节点的最大深度就是1+二者中的较大者。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。这道题和最大深度思路类似,但是有陷阱,需要注意最小深度是从根节点到最近叶子节点的最短路径上的节点数量。原创 2023-11-23 23:28:35 · 391 阅读 · 0 评论 -
代码随想Day17 | 110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和
这道题目我自己写出来了,我的思路是要到左叶子的上一层就要进行加操作,否则很难判断,按照我的思路写了代码,但是我在写的时候结束条件没有弄清楚,我用到的是先序遍历,到最后是调试出来的正确结果,没有return值的时候可ac,思路没有完全清楚原创 2023-11-25 23:08:12 · 340 阅读 · 0 评论