第9章|动态规划
Unit 09 · LeetCode #64 最小路径和
局部更便宜,
不一定通向全局最小。
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 ≤ 2000 ≤ grid[r][c] ≤ 200
示例
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:1 → 3 → 1 → 1 → 1
输出:7
解释:1 → 3 → 1 → 1 → 1
输入:grid = [[1,2,3],[4,5,6]]
输出:12
输出:12
目标复杂度
每个格子只处理一次,时间复杂度 O(mn);一维压缩后额外空间为 O(n)。
六段自适应流程
本环节已完成
请停留观察当前状态,确认你能解释高亮值的来源。