标签:LeetCode
最小路径和:压缩二维动态规划
从只能向右或向下移动的约束推导最小路径和状态转移,并将二维状态表压缩为一维数组。
路径总和 III:树上的前缀和
用前缀和计数任意起点的向下路径,避免为每个节点重新搜索子树,并说明回溯时恢复计数的原因。
最大正方形:用相邻状态确定边长
定义以当前单元格为右下角的最大正方形边长,推导三邻居状态转移,并给出 Java 动态规划实现。
太平洋大西洋水流:从海岸反向搜索
从两片海洋的边界逆着水流方向搜索,求两个可达集合的交集,避免从每个陆地单元重复遍历。
二叉树中序遍历:递归与显式栈
从左、根、右的访问顺序出发,实现二叉树中序遍历,并比较递归与显式栈两种写法的边界和复杂度。
爬楼梯:从递推关系到动态规划
从最后一步的两种选择推导斐波那契式状态转移,并用常量空间实现爬楼梯方案计数。
罗马数字转整数:相邻字符决定加减
把罗马数字字符映射为数值,根据当前值与后一个值的大小关系决定加减,用一次扫描完成转换。
金字塔转换矩阵:哈希预处理与回溯
将三元组规则预处理为候选映射,再通过回溯逐层构造金字塔并在无候选时提前剪枝。
被围绕的区域:从边界反向搜索
从边界上的 O 出发标记所有不可填充区域,再统一翻转剩余单元格,避免逐区域判断边界连通性。
字母异位词分组:排序键与哈希表
将每个单词排序后的结果作为哈希键,归并由相同字符组成的字符串,并分析正确性与复杂度。
缺失数字:标记数组解法
使用长度为 n+1 的标记数组记录出现过的数字,并讨论异或与数学求和等低空间替代方案。
最小路径和:二维动态规划基础解法
使用二维动态规划记录到达每个网格的最小代价,讲清边界初始化、状态转移与复杂度。


