- 博客(107)
- 收藏
- 关注
原创 代码随想录算法训练营 Day53 | 图论 part11
1. 图的存储 — 邻接矩阵用二维数组表示权值节点间无边设为大数(10005),便于后续迭代更新对角线默认可视为 0(自己到自己距离)2. 核心思想 — 多源最短路Floyd 算法的动态规划思想:对任意两点距离dist[i][j],如果通过中间节点k3. 三层循环结构外层循环k:尝试每个节点作为中转中间与内层循环ij:对所有点对执行松弛操作保证每次更新考虑了最多经过k之前的所有节点1. 问题背景在 1000×1000 的棋盘上求骑士从(x1, y1)到(x2, y2)的最少步数。
2026-05-08 11:32:58
452
原创 代码随想录算法训练营 Day52 | 图论 part10
这段代码实现的是 SPFA 算法,用于求有向图中从1号点到n号点的最短路径。SPFA 可以看作是 Bellman-Ford 算法的队列优化版本。它的核心思想是:如果某个点的最短距离被更新了,那么从这个点出发的边也可能继续更新其他点,所以把这个点放进队列中继续处理。这段代码实现的是 带负权环判断的 SPFA 算法。它不仅可以求从1号点到n号点的最短路径,还可以判断从起点出发是否能够到达某个 负权环。如果存在负权环,最短路径会被不断变小,此时最短路没有实际意义,程序输出:circle。
2026-05-07 09:27:55
410
原创 代码随想录算法训练营 Day51 | 图论 part09
1. 算法思想使用 Dijkstra 算法计算单源最短路径。通过优先队列(小顶堆)每次选出当前未访问的最短距离节点进行松弛操作。2. 数据结构邻接表存储图。优先队列用于快速获取当前最短距离节点。minDist数组存储当前最短路径长度。visited数组防止重复处理节点。1. 算法思想这是 Bellman-Ford 算法,用于计算单源最短路径。核心是进行 n-1 次“松弛操作”,每次遍历所有边更新最短距离。
2026-05-06 11:30:17
321
原创 代码随想录算法训练营 Day50 | 图论 part08
这段代码使用的是BFS 入度法实现拓扑排序。核心思想是:每次选择入度为 0 的节点加入结果入度为0表示这个节点没有前置依赖,可以直接处理。处理完这个节点后,就把它指向的节点入度减一。如果某个节点的入度也变成0,说明它的前置依赖已经全部处理完,也可以加入队列。Dijkstra 算法用来求单源最短路。也就是:从一个起点出发,到其他所有点的最短距离这段代码中,起点是1,终点是n。核心思想是:每次选择当前距离起点最近、且还没有确定最短路的节点。
2026-04-30 09:33:12
454
1
原创 代码随想录算法训练营 Day49 | 图论 part07
Prim 算法是从“点”的角度来构造最小生成树。每次都从还没有加入生成树的节点中,选择一个距离当前生成树最近的点。也就是:每次选一个离当前生成树最近的点加入Kruskal 算法是从“边”的角度来构造最小生成树。先把所有边按照权值从小到大排序,然后从小到大依次尝试加入。如果加入这条边不会形成环,就加入最小生成树。如果会形成环,就跳过。
2026-04-29 12:10:46
489
原创 代码随想录算法训练营 Day48 | 图论 part06
使用并查集判断图中是否出现环。遍历每条边(s, t)如果s和t已经连通,再加这条边就会形成环此时这条边就是“多余连接”有向图中删除一条边,使其成为有根树(LeetCode:冗余连接 II)
2026-04-28 11:14:26
416
原创 代码随想录算法训练营 Day47 | 图论 part05
join(s, t):表示 s 和 t 连通最后判断start和end是否在同一集合本质是:判断两个节点是否连通。
2026-04-27 09:23:41
409
原创 代码随想录算法训练营 Day46 | 图论 part04
如果该方向是海洋或越界,就说明这条边属于周长最终把所有这样的边累加起来,就是总周长。这题是典型的最短路径问题,使用 BFS 解决。每个单词可以看作一个节点,如果两个单词只差一个字符,就可以看作它们之间有一条边。从beginStr开始 BFS,第一次遇到endStr时,路径长度就是最短转换长度。从节点1出发,判断是否能到达图中所有节点。本质是:判断图的连通性(从 1 出发是否能遍历所有点)
2026-04-26 10:49:44
461
原创 代码随想录算法训练营 Day45 | 图论 part03
本题不是直接找孤岛,而是反向思考:先从地图四条边界上的陆地出发,把所有和边界连通的陆地都标记掉。最后剩下没有被访问过的陆地,就是孤岛陆地。从地图四条边界出发遇到陆地(1)就进行 DFS / BFS将所有能连通到的陆地标记为2最后遍历输出:2 → 1(保留)其他 → 0本质是:先标记“安全区域”,再统一处理结果这题的关键是反向搜索。正常想法是从每个点出发,看它能不能流到两类边界,但这样会重复搜索很多次。从左边界、上边界出发,找出所有能到达第一类边界的点。
2026-04-25 10:59:49
485
原创 代码随想录算法训练营 Day44 | 图论 part02
结论:笔试/面试写 BFS 最稳妥;日常刷水题图省事写 DFS。对比维度DFS (递归)BFS (队列)代码量极简,几行搞定较繁琐,需引入<queue>致命缺陷极易栈溢出(网格全为1时,递归深度达 N*M)无栈溢出风险(空间在堆上分配)最佳场景数据规模小(如 < 100x100)大规模数据,或需要求最短路径时搜索逻辑不变,外层用取最大值。
2026-04-24 10:34:36
370
原创 代码随想录算法训练营 Day43 | 图论 part01
(锁定节点,防止在下面递归时绕圈子)和(把路走上去)。(看看这条路走下去能不能到终点)。和(这条路走完了或者走不通,退回来,把脚印抹去,让别的路可以走过来)。
2026-04-23 09:12:40
602
原创 代码随想录算法训练营 Day42 | 单调栈 part02
维度方法一:动态规划(双向遍历)方法二:单调栈核心逻辑纵向计算:提前算好每个位置左边的最高点和右边的最高点,然后直接相减求每个位置的积水深度。横向计算:在遍历过程中,遇到比栈顶高的元素时,弹栈并确定“左边界-底部-右边界”,计算这一层凹槽的面积(宽×高)。空间复杂度O(n),需要两个额外的数组lHeight和rHeight。O(n),需要一个栈结构,最坏情况下空间与方法一相同。时间复杂度O(n),三个简单的 for 循环。
2026-04-22 12:14:07
259
原创 代码随想录算法训练营 Day41 | 单调栈 part01
单调栈的本质是维护一个等待队列。栈里存的是“还在苦苦等待更高温度的日子”。当你遇到一个温度很高的日子时,它不仅能解决自己的问题,还能顺手把前面那些比它冷的日子的问题一次性全部解决(while循环的作用),这就避免了每个日子都去往后傻傻遍历。每日温度:存索引i。因为要算距离(本题:存数值nums2[i]。因为不需要算距离,只需要知道“下一个更大的值是谁”,拿数值直接去哈希表里查更方便。单调栈的作用:栈中保存的是还没找到下一个更大元素的索引。并且栈内索引对应的元素值是单调递减的(从栈底到栈顶)。
2026-04-21 11:17:25
412
原创 代码随想录算法训练营 Day40 | 动态规划 part13
从这道题开始,不再是两个字符串比来比去,而是在一个字符串内部截取区间[i, j],研究这个区间的性质。dp[i][j]代表闭区间[i, j]内的子串是否为回文串(bool类型)。目标函数:统计矩阵中true的个数。647. 回文子串:要求必须连续。如果s[i]!= s[j],这区间绝对不可能是回文子串了,直接false,啥也不用干。516. 回文子序列:只要求相对顺序,可以不连续。如果s[i]!= s[j],大区间不行,不代表内部没有短的回文序列!。01背包 vs 完全背包(一维优化下)类型。
2026-04-20 09:52:17
420
原创 代码随想录算法训练营 Day39 | 动态规划 part12
dp[i][0]当word1[i-1]!题号目标函数允许的操作s[i]==t[j]匹配时s[i]!=t[j]不匹配时初始化边界392判断子序列返回bool(求最大长度==n)只能删t继承左上+1只看左dp[i][j-1](只能删t)全0115不同子序列返回int(求路径总数)只能删s相加左上 + 正上(用/不用当前字符)只看上dp[i-1][j](只能删s)dp[i][0]=1(空串是任何串子序列)583删除操作返回int(求最小步数)能删s或t继承左上看左和上取Min+1。
2026-04-17 09:28:57
438
原创 代码随想录算法训练营 Day38 | 动态规划 part11
else如果nums1中的数字 A 和 nums2 中的数字 B 相等,你在它们之间画一条线。题目要求线不能交叉。线一旦交叉,说明在nums1中靠后的元素,连上了nums2中靠前的元素。这就意味着,能够合法画出来的线,它们在nums1中的相对顺序,和在nums2中的相对顺序,必须是完全一致的。“相对顺序一致且元素相同”,这不就是子序列的定义吗?要求画最多的线,就是求最长的子序列。53. 最大子数组和给你一个整数数组nums。
2026-04-16 09:04:02
429
原创 代码随想录算法训练营 Day37 | 动态规划 part10
dp[i]最容易踩的坑:误把dp[i]理解为“前i个元素中的最长递增子序列长度”。如果是这样理解,dp[i]和dp[i-1]之间根本无法建立直接联系,代码写不出来。dp[i]必须是以nums[i]结尾的长度。这意味着nums[i]必须被选中。有了这个强制前提,才能去前面找比它小的数来“接龙”。fordp。
2026-04-15 09:13:12
396
原创 代码随想录算法训练营 Day36 | 动态规划 part09
奇偶下标映射法。奇数位全管“买”(1买,3买,5买…)偶数位全管“卖”(2卖,4卖,6卖…)只要确定了步长是j += 2,后面的公式就是套模板。之前的解法是:第一次买、第一次卖、第二次买… 容易把冷冻期的限制搞丢。这个解法直接问自己:“我今天到底处于什么情况?我手里有股吗?(状态 1)我手里没股,我能买吗?(状态 2:能买)我手里没股,我今天刚卖吗?(状态 3:刚卖)我手里没股,我今天不让买吗?(状态 4:冷冻)在现实中,股票买卖通常是“买入扣佣金,卖出扣印花税”。
2026-04-14 11:17:59
371
原创 代码随想录算法训练营 Day35 | 动态规划 part08
把“不持有股票”这个状态,拆分成dp[i][0](一直没买/之前卖了)和dp[i][2](今天刚卖)。虽然在这道只交易一次的题里,dp[i][0]全程都是 0,显得有点“多余”。对比仅限一次交易的 121 题,本题的代码仅在一处发生了实质性的修改:由-prices[i]变为了。单次交易:买入时不存在历史利润,必须以初始本金(0)支付,因此成本固定为prices[i]。多次交易:买入时可以使用之前卖出股票所累积的利润(dp[i-1][2])进行抵扣。这保证了利润可以滚雪球式复投。
2026-04-13 15:33:14
366
原创 代码随想录算法训练营 Day34 | 动态规划 part07
这道题的核心在于“不能偷相邻两家”。推导出的选:我就要当前元素,那我就必须承担不能选前一个元素的代价,所以我只能去加上i-2的最优解。不选:我不要当前元素,那我的最优解就完全继承前一个元素i-1的最优解。环形容器在算法题中是个大麻烦,因为这破坏了单向的递推关系。抢了第 0 间,那就绝对不能抢第 n−1间 →→ 问题变成求[0, n-2]的线性最大值。没抢第 0 间,那就可以考虑抢第 n−1 间 →→ 问题变成求[1, n-1]的线性最大值。
2026-04-13 15:05:58
389
原创 代码随想录算法训练营 Day33 | 动态规划 part06
因为我们只关心“最少几张纸币”,[1, 1, 5]和[5, 1, 1]凑出 7 块钱都是 3 张硬币。所以外层物品、内层背包是绝对正确的。在传统的完全背包题中,题目会直接给你一个数组(比如硬币面额)。而这道题只给了一个数字物品:所有的完全平方数 1^2,2^2,3^2...k^2(其中 k^2≤n)。背包容量:目标和n。物品重量:i^2。物品价值:数量1。遇到字符串能不能被分割的问题,最直觉的想法就是:在哪下刀?假设我们要判断前j个字符是否合法,我们在0到j-1s[0...i-1]
2026-04-13 14:21:37
449
原创 代码随想录算法训练营 Day32 | 动态规划 part05
以计算dp[5],且当前物品重量w[i] = 20-1 背包(逆序):计算dp[5]时,需要用dp[3]。因为逆序,dp[3]还没被更新,它代表没有放当前物品时的状态。所以当前物品只能放 1 次。完全背包(正序):计算dp[5]时,需要用dp[3]。因为正序,dp[3]已经被更新过了。此时的dp[3]已经包含了当前物品!所以,相当于在dp[3]的基础上又放了一次当前物品。这样就实现了物品的重复选取。特性0-1 背包完全背包物品数量只能选 1 次可以选无数次一维数组遍历顺序逆序 (
2026-04-13 11:23:42
418
原创 代码随想录算法训练营 Day31 | 动态规划 part04
题目中石头两两碰撞,小的粉碎,大的减去小的。这其实就是在做 减法。想象一下,如果我们把石头分成两堆:A堆 和 B堆。A堆的总重是 WA,B堆的总重是 WB。如果拿 A 堆的一块石头去撞 B 堆的一块石头,本质上就是让 WA 和 WB 做减法。为了让最后剩下的石头最小,我们需要 让 WA 和 WB 尽可能接近。最佳情况是 WA=WB=sum/2,此时结果为 0。所以,问题转化成了:在容量为 sum/2 的背包里,尽可能多装石头。分割等和子集:问能不能正好装满sum/2。判断。
2026-04-08 09:10:19
427
原创 代码随想录算法训练营 Day30 | 动态规划 part03
特性二维解法dp[i][j]一维解法dp[j]遍历顺序正序遍历背包容量j逆序遍历背包容量j原因dp[i][j]依赖的是上一层。因为i-1层的数据在二维数组中是独立保存的,无论j怎么变,都不会覆盖上一层的数据,所以正序没问题。dp[j]依赖的是“旧值”。如果正序遍历,计算dp[j]时,已经被更新成“当前物品也考虑进去”的新值了,这会导致同一个物品被重复使用(变成完全背包)。逆序保证了我们用的是上一轮的“旧数据”,确保每个物品只取一次。物品:数组中的每个数字。重量:数字的值nums[i]。
2026-04-07 12:49:04
362
原创 代码随想录算法训练营 Day29 | 动态规划 part02
dp[i][j]代表终点的状态。。这是组合数学中的加法原理。遍历顺序:因为是i依赖i-1j依赖j-1,所以必须 先算出上边和左边的值。双重循环的顺序(从上到下、从左到右)是正确的。错误写法:不管有没有障碍物,把第一行第一列全初始化为 1,遇到障碍物时才设为 0。后果:障碍物后面的格子本应是 0(不可达),却被错误地初始化成了 1。正确写法:使用break。一旦遇到障碍物,循环终止,障碍物及其后面的格子都保持初始值 0。这是最标准、最高效的初始化方式。当我们把整数i拆分成j和i-j。
2026-04-06 11:07:12
369
原创 代码随想录算法训练营 Day28 | 动态规划 part01
dp[i]定义为第i个斐波那契数的值。确定递推公式:题目直接给了,。这是 DP 的灵魂。。这是递推的基石。确定遍历顺序:因为dp[i]依赖前面的dp[i-1]和dp[i-2],所以必须 从前向后 遍历。举例推导:比如 n=4,序列是 0, 1, 1, 2, 3。手动推导验证代码逻辑是否正确。最后一步:想要跳到第n阶,最后一步只有两种选择:从n-1阶跳 1 步。从n-2阶跳 2 步。推导:既然最后一步只有这两种走法,那么走到n阶的方法数 = 走到n-1的方法数 + 走到n-2。
2026-04-06 10:55:12
391
原创 代码随想录算法训练营 Day27 | 贪心算法 part05
假设数字是 332。从前向后:遇到3和3,没问题。遇到3和2,递减了。把2变成9,前面的3减 1 变成2。结果是 329。329依然不是单调递增(3 > 2而且329也不是小于332的最大单调递增数(正确答案是299这道题的难点在于:我们不想在叶子上装摄像头,因为叶子太多了;我们想在尽量高的地方装摄像头,覆盖更多节点。如果子节点没被覆盖,父节点必须装摄像头。如果子节点装了摄像头,父节点就被覆盖了。这种自底向上的推导逻辑,必须使用后序遍历(左->右->中)。
2026-04-03 10:44:49
346
原创 代码随想录算法训练营 Day26 | 贪心算法 part04
这道题的核心在于维护一个 “当前重叠区域”。一支箭要想射爆多个气球,必须射在它们共同的重叠区域内。字符'a'出现在范围[0, 8]。字符'b'出现在范围[2, 5]。如果我们在遍历中同时遇到了'a'和'b',那么这两个范围必须合并,因为同一个分段里不能把同一个字符拆开。合并后的范围就是[0, 8]。当我们的指针i走到了8,就意味着这个合并范围结束了,可以切一刀。
2026-04-02 11:39:13
418
原创 代码随想录算法训练营 Day25 | 贪心算法 part03
假设我们从index出发,跑到i时发现油不够了(res < 0。关键结论:不仅index跑不到i+1index到i之间的任何一个站点j作为起点,都跑不到i+1。原因:因为你从index能顺利跑到j,说明index到j是攒下了油的(或者至少没亏)。如果你带着这些“积蓄”从index出发都在i处挂掉了,那你从j出发(没有任何积蓄,从 0 开始),肯定挂得更快!策略:既然[index, i]这段区间里的所有站点都不行,那就直接把起点跳到i + 1,不用回头试了。这就是贪心的“跳跃”优化。
2026-04-01 19:19:33
409
原创 代码随想录算法训练营 Day24 | 贪心算法 part02
持有不动:第一天买,最后一天卖。利润 = 5−1=4,5−1=4。贪心算法:第1天买,第2天卖:赚 2−1=12−1=1第2天买,第3天卖:赚 3−2=13−2=1第3天买,第4天卖:赚 4−3=14−3=1第4天买,第5天卖:赚 5−4=15−4=1总利润:1+1+1+1=41+1+1+1=4。结论:连续上涨的区间,分次买卖和一次买卖的收益是完全等价的。所以,我们不需要去寻找复杂的“波峰波谷”,只需要把每一天比昨天涨了的钱加起来即可。
2026-04-01 19:17:32
414
原创 代码随想录算法训练营 Day23 | 贪心算法 part01
题目要求最长摆动序列,实际上就是求原始数组中波峰和波谷的数量。波峰:左边低,右边高(波谷:左边高,右边低(贪心思想:只要发现趋势发生了反转(从升变降,或从降变升),我们就计数cnt++。这相当于在这个转折点“保留”了该元素,而去掉了中间单调的那些元素。我们在遍历数组时,维护一个当前的累加和sum。sum >= 0说明之前的序列是有价值的(或者至少不亏)。加上当前的nums[i],有可能让未来的和更大。所以我们保留sum,继续累加。sum < 0说明之前的序列已经是“负资产”了。
2026-03-30 11:36:17
383
原创 代码随想录算法训练营 Day22 | 回溯算法 part04
sort特性90. 子集 II (Subsets II)491. 递增子序列能否排序能 (求所有子集,顺序不重要)不能 (求子序列,必须保持原序)去重方法sort哈希表去重范围排序后利用数组下标判断利用 set 记录本层已选数值代码特点空间 O(1)空间 O(N) (每层递归都有 set 开销)46. 全排列给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以 按任意顺序 返回答案。public:// used 数组:记录当前路径中哪些下标的元素已经被使用过。
2026-03-29 11:52:22
392
1
原创 代码随想录算法训练营 Day21 | 回溯算法 part03
特性版本一 (引用传递版本二 (值传递内存模型全局唯一。所有递归层级共享同一个path对象。层级独立。每一层递归都持有path的一个副本。回溯操作显式回溯。必须手动执行erase撤销修改,恢复到上一层状态。隐式回溯。函数结束返回时,局部变量path自动销毁,上一层path未被修改。性能开销较低。没有字符串拷贝开销,只有引用传递。较高。每次递归都要复制一次path字符串。代码复杂度稍高。需要仔细计算erase的长度,容易出错。极低。代码线性,不需要考虑撤销逻辑,非常直观。
2026-03-27 09:42:18
471
原创 代码随想录算法训练营 Day20 | 回溯算法 part02
排序后:数组变为升序(例如逻辑推导:如果已经大于target,因为,那么肯定也大于target。结论:我们可以直接终止当前层循环,而不是仅仅跳过当前元素。used组合问题:从集合中选 k 个数。分割问题:将字符串切成 k 段。index代表当前这一刀切在哪里。for循环中的i代表尝试在index到i之间切一段出来。path存储的是切出来的每一段字符串。
2026-03-26 11:06:00
465
原创 代码随想录算法训练营 Day19 | 回溯算法 part01
确定返回值和参数:返回值通常为void,参数根据题目需求定(这里是范围n、目标数量k、起始位置startIndex确定终止条件:当路径长度满足要求()时,保存结果并返回。确定单层搜索逻辑:for循环横向遍历(从startIndex到n递归纵向遍历。核心:和构成了回溯的“做选择”与“撤销选择”。组合问题:依然是从集合中选 k 个数(这里是 1-9)。增加约束:不仅要选够 k 个,还要满足和 == n。参数变化:回溯函数多了一个sum。
2026-03-25 11:55:53
471
原创 代码随想录算法训练营 Day18 | 二叉树 part08
当前节点太小,且因为 BST 性质,它的左子树里的值只会更小,全部都要删掉。我们不需要删除节点,而是直接“跳过”当前节点,去右子树里找是否有符合要求的大值。这相当于把右子树“提”上来。当前节点太大,且因为 BST 性质,它的右子树里的值只会更大,全部都要删掉。同理,去左子树里找是否有符合要求的小值。当前节点符合要求,保留它。但是它的子树里可能有不合法的值,所以需要递归修剪左右子树。因为数组是有序的,要平衡,就必须让左右子树的节点数量尽可能相近。因此,数组的中间元素自然而然就是根节点。
2026-03-24 18:49:05
445
原创 代码随想录算法训练营 Day17 | 二叉树 part07
这道题与“普通二叉树最近公共祖先”最大的不同在于:不需要回溯。普通二叉树:不知道p和q在哪边,必须通过后序遍历(自底向上)把左右子树都查一遍才能确定。BST:可以通过节点值的大小关系直接判断方向:都比当前小 -> 往左走。都比当前大 -> 往右走。一大一小(或等于) -> 找到了!寻找位置:利用 BST 性质(左 < 根 < 右),一路向下直到找到空节点。链接节点:递归法:利用函数返回值自动完成父子节点的链接(代码非常简洁。迭代法:需要手动维护一个pre。
2026-03-23 10:40:59
408
原创 代码随想录算法训练营 Day16 | 二叉树 part06
在有序序列中,求最小差值一定是在相邻的两个元素之间产生。因此,我们只需要在中序遍历的过程中,计算当前节点与前驱节点的差值即可。方法一(哈希表):优点:思路最直观,不需要利用 BST 的性质,任何二叉树都适用。缺点:空间复杂度高 O(N),需要额外存哈希表和优先队列。方法二/三(双指针/迭代):优点:充分利用了 BST 中序遍历有序 的性质。相同的元素在中序遍历中一定是连续的。只需要一次遍历,空间复杂度低(不考虑结果集和栈,空间 O(1))。cnt计数,遇到不同重置为 1;实时判断。
2026-03-21 10:15:05
439
原创 代码随想录算法训练营 Day15 | 二叉树 part05
找根:在当前数组区间中找到最大值,它就是根节点。分割:最大值左边的部分是左子树,右边的部分是右子树。递归:对左右两部分重复上述过程。这道题的逻辑非常清晰,就是两棵树“同位置节点相加”。保证了两棵树在同一层级、同一位置进行操作。新树构建:这是一个构造新树的过程,通过创建新节点,而不是修改原有的树(虽然修改原有树也可以解题,但新建树更安全、逻辑更清晰)。这道题利用了二叉搜索树(BST)的核心性质:左 < 根 < 右。递归法:逻辑非常直观,利用系统栈来保存状态。代码简洁,符合直觉。
2026-03-20 16:06:01
431
原创 代码随想录算法训练营 Day14 | 二叉树 part04
最底层:通过来保证每次更新都是找到了更深的一层。最左侧:通过 前序遍历(根左右) 的顺序来保证。为什么前序遍历能保证是“最左侧”?因为我们在递归时,先调用,后调用。当 DFS 到达某一层时,最先遇到 的叶子节点一定是该层最左边的节点。由于判断条件是(严格大于),所以同一层后续遇到的节点(中间或右侧)会被忽略。与之前的“二叉树路径”题目类似,这里使用了int sum这行代码只在当前函数作用域生效。当递归进入时,传递的是减完之后的副本。回溯:当左子树递归结束返回到当前层时,当前的sum。
2026-03-19 19:25:02
407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅