给定二叉树和目标和,找出所有根到叶子路径和等于目标值的路径。一个经典陷阱是记录结果时直接存共享的可变列表引用,而不是拷贝一份:本文用真实反例演示回溯的 pop 会把已经存好的结果也清空成空列表,再给出正确写法和 5 种语言实现。
给定一棵二叉树,原地把它拉直成一条只用 right 指针连接的链表。一个容易漏掉的陷阱是只重连 right 指针、忘了清空 left:right 链的值序列看起来完全正确,但树并没有真正拉直。本文用真实反例和 5000 组随机树验证这个错误是系统性的,再给出正确写法和 5 种语言实现。
给定字符串 s 和 t,求 s 的子序列中等于 t 的不同方案数。一个极易漏掉的陷阱是 DP 的边界 dp[i][0] 没有初始化成 1,导致整张表必然算出 0:本文用真实反例和 2000 组随机测试验证,再给出正确写法和 5 种语言实现。
给定一棵完美二叉树,把每个结点的 next 指针指向右边的相邻结点。一个容易漏掉的陷阱是只连接同一父结点下的左右孩子,漏了跨父结点边界的连接:本文用真实反例证明,从第三层起最底层永远只能连上 2 个结点,再给出正确写法和 5 种语言实现。
和116题一样填充 next 指针,但这次树不保证是完美二叉树。一个真实会犯的错误是照搬116题的写法,假设每个结点的左右孩子必然成对存在:本文用真实反例和2000组随机测试验证,超过四分之一的树会直接崩溃,再给出正确的哨兵写法和 5 种语言实现。
生成杨辉三角的前 numRows 行。一个容易踩的坑是不特判每行两端,统一用递推公式计算:右边界会真正越界崩溃,左边界在 Python 里会被负索引悄悄取到错误的值。本文用真实反例演示这两种失败模式,再给出正确写法和 5 种语言实现。
只返回杨辉三角的第 rowIndex 行,要求 O(k) 额外空间。一个容易踩的坑是原地更新数组时方向搞反了,从左往右更新会用到本轮已经被覆盖过的新值:本文用真实反例验证,再给出正确写法和 5 种语言实现。
给定三角形数组,求从顶部到底部的最小路径和。一个很直觉但错误的思路是每步贪心选数值较小的相邻结点:本文用真实反例证明贪心和最优解能差出近百倍,并用 2 万组随机测试验证近三分之一的三角形会让贪心给出错误答案,再给出正确的 DP 写法和 5 种语言实现。
给定一个整数数组 `nums` 和一个目标值 `target`,找出数组中和为 `target` 的两个元素,返回它们的下标。题目保证恰好有一个答案,同一个位置的元素不能用两次。这道题的核心是把"找另一半"从逐个比较换成哈希表查找。本文用真实测量对比两种写法在不同规模下的耗时,验
给定一个 32 位有符号整数 `x`,返回把它的数字部分反转后的结果;如果反转后超出 32 位有符号整数的范围 `[-2^31, 2^31 - 1]`,返回 0。题目还规定环境不允许存储 64 位整数,所以不能先用更宽的类型算出结果再比较。这道题没有值得做成动画的动态过程,难点全
给定两个非空链表,各自表示一个非负整数:每个结点存一位数字,而且是逆序存放的,个位在链表头。把这两个数相加,同样用逆序链表返回和。这道题的直觉写法是先把链表转成整数、相加、再拆回链表,但数字位数一多就装不下。正确的做法是像竖式加法一样从个位开始逐位相加,带着进位往后走。本文实测"
给定一个字符串 `s`,求其中不含重复字符的最长子串的长度。标准做法是滑动窗口:右端逐个字符向前,窗口内始终没有重复字符;遇到重复时,只把左端移到"上一次出现的位置之后",而不是一格一格地缩。本文实测暴力解在不同长度下的耗时,演示一个很容易写错的细节(左端不能倒退)会得到什么结果