第9章|动态规划
Unit 08 · LeetCode #62 不同路径
二维网格被压成一行后,
同一个格子会先代表“上方”,再代表“当前”。
本单元不把 dp[column] += dp[column - 1] 当成魔法公式。你会沿着真实计算波前观察:覆盖前的 dp[column] 来自上一行,左侧值已经属于当前行;更新顺序正是状态语义的一部分。
已恢复上次学习位置阶段、动画、答题、代码和迁移进度均已恢复。
知识桥梁|Unit 07 → Unit 08
Unit 07:一维金额状态
循环顺序决定当前格读到的是哪一个计数阶段,从而决定统计组合还是排列。
线性依赖 → 二维空间依赖
Unit 08:网格位置状态
当前格只依赖上方与左方;压缩后必须持续分辨旧行值与当前行值。
本单元贯穿问题当前读取的两个数字分别代表哪个二维位置?它们是在本轮之前就存在,还是本轮刚刚写入?
LeetCode #62 原题题面转述、示例、约束与函数签名
题目要求
一个机器人位于 m × n 网格的左上角,希望移动到右下角。机器人每次只能向右或向下移动一步,返回所有可能的不同路径数量。
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
pass
约束
1 ≤ m, n ≤ 100- 测试数据保证答案不超过
2 × 10⁹
示例
输入:m = 3, n = 7
输出:28
输出:28
输入:m = 3, n = 2
输出:3
路径:右下下、下右下、下下右
输出:3
路径:右下下、下右下、下下右
目标复杂度
二维版本时间复杂度 O(mn)、空间复杂度 O(mn);一维压缩后空间为 O(n)。
六段主流程
本环节已完成
页面不会自动跳转。请停留观察当前网格、依赖箭头和覆盖前后的数组语义,再主动进入下一阶段。