第9章|动态规划

Unit 09 · LeetCode #64 最小路径和

← Unit 08
仅本次页面有效
U09
Minimum Path SumGrid DP · Minimum Cost

局部更便宜,
不一定通向全局最小。

Unit 08 已经建立“当前格依赖上方和左方”的网格结构。本单元保留相同依赖方向,但不再统计路径数量,而是让每个格子保存到达这里的最小累计代价。动画会持续区分原始格子费用、前驱累计费用和最终写入值。

已恢复上次学习位置阶段、动画、答题、代码槽位和迁移进度均已恢复。
知识桥梁|Unit 08 → Unit 09
Unit 08:统计所有路径

dp[r][c] = top + left,两个前驱的方案数量全部保留。

求和 → 取最小
Unit 09:保留最便宜路径

dp[r][c] = cost + min(top,left),只保留更小累计代价。

本单元贯穿问题当前格的费用是多少?上方与左方的累计费用分别是多少?本轮为什么只加一次当前格费用?
LeetCode #64 原题题面转述、示例、约束与提交签名

题目要求

给定一个由非负整数构成的 m × n 网格,从左上角出发,每次只能向右或向下移动,返回到达右下角时路径上所有数字之和的最小值。

from typing import List class Solution: def minPathSum(self, grid: List[List[int]]) -> int: pass

约束

  • 1 ≤ m, n ≤ 200
  • 0 ≤ grid[r][c] ≤ 200

示例

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:1 → 3 → 1 → 1 → 1
输入:grid = [[1,2,3],[4,5,6]]
输出:12

目标复杂度

每个格子只处理一次,时间复杂度 O(mn);一维压缩后额外空间为 O(n)。

六段自适应流程
本环节已完成

请停留观察当前状态,确认你能解释高亮值的来源。