当前位置: 首页 > news >正文

LeetCode 64. Minimum Path Sum 题解

LeetCode 64. Minimum Path Sum 题解

题目描述

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例 1:

输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小

示例 2:

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

解题思路

这是一个经典的动态规划问题,与 Unique Paths 类似,但要求最小路径和。

状态定义:

  • dp[i][j] 表示从起点到达位置 (i, j) 的最小路径和

状态转移方程:

  • 只能从上方或左方到达
  • dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1])

初始条件:

  • dp[0][0] = grid[0][0]
  • 第一行:dp[0][j] = dp[0][j-1] + grid[0][j]
  • 第一列:dp[i][0] = dp[i-1][0] + grid[i][0]

代码实现

方法一:二维动态规划

def minPathSum(grid): if not grid or not grid[0]: return 0 m, n = len(grid), len(grid[0]) dp = [[0] * n for _ in range(m)] # 初始化起点 dp[0][0] = grid[0][0] # 初始化第一行 for j in range(1, n): dp[0][j] = dp[0][j-1] + grid[0][j] # 初始化第一列 for i in range(1, m): dp[i][0] = dp[i-1][0] + grid[i][0] # 填充 dp 数组 for i in range(1, m): for j in range(1, n): dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) return dp[m-1][n-1]

方法二:一维动态规划(空间优化)

def minPathSum(grid): if not grid or not grid[0]: return 0 m, n = len(grid), len(grid[0]) dp = [0] * n for i in range(m): for j in range(n): if i == 0 and j == 0: dp[j] = grid[i][j] elif i == 0: dp[j] = dp[j-1] + grid[i][j] elif j == 0: dp[j] = dp[j] + grid[i][j] else: dp[j] = grid[i][j] + min(dp[j], dp[j-1]) return dp[n-1]

复杂度分析

  • 时间复杂度:O(m × n),需要遍历整个网格
  • 空间复杂度
    • 方法一:O(m × n)
    • 方法二:O(n)

测试案例

# 测试案例 1 assert minPathSum([[1,3,1],[1,5,1],[4,2,1]]) == 7 # 测试案例 2 assert minPathSum([[1,2,3],[4,5,6]]) == 12 # 测试案例 3 assert minPathSum([[1]]) == 1 # 测试案例 4 assert minPathSum([[1,2],[1,1]]) == 3

总结

本题是动态规划的经典应用,与 Unique Paths 类似但增加了路径权重的考虑。

关键点:

  • 状态定义:dp[i][j] 表示到达 (i, j) 的最小路径和
  • 状态转移:只能从上方或左方到达,取两者中的最小值
  • 空间优化:可以降维,只保留上一行的数据

通过本题可以深入理解带权路径的动态规划问题。

http://www.jsqmd.com/news/548463/

相关文章:

  • Qwen3-4B Instruct-2507:专注于纯文本的高效模型,为写作与编程提速
  • Ren‘Py脚本恢复与分析工具:unrpyc全维度应用指南
  • 3步高效整合音乐资源:打造无缝跨平台听歌体验
  • P10133 [USACO24JAN] Balancing Bacteria B
  • 从代码到落地:基于快马平台构建卓晴智能花卉养护系统全实战
  • Qwen3.5-4B模型Python零基础入门:从环境搭建到第一个AI对话程序
  • 3种突破Navicat Mac版试用期限制的终极方案:从新手到专家的全流程指南
  • SenseVoice-small-onnx语音识别效果:不同信噪比下识别鲁棒性测试
  • 实战演练:基于快马平台快速开发一个可动态切换主题色的网站Demo
  • 韩语面试工具推荐:告别背模板,用真实场景征服面试官
  • 5步突破:用RVC变声器从零到专业音色转换的实战指南
  • OpenClaw隐私保护方案:百川2-13B本地化部署处理敏感数据实战
  • Linux 输入子系统实战:01设备信息查询程序
  • Vue3+Monaco Editor:从零封装一个支持SQL语法与智能提示的代码编辑器
  • Realistic Vision V5.1 虚拟摄影棚:QT开发跨平台AI图像生成桌面应用
  • 大模型微调:教科书级数据工程,200条数据提升170%BLEU!揭秘金融与医疗领域爆款模型的底层逻辑
  • 华大HC32F460芯片FPU配置全攻略:从IAR支持包安装到硬件浮点验证
  • 使用Matlab分析与可视化伏羲模型输出结果
  • Wan2.1-umt5赋能微信小程序:智能对话功能开发全流程
  • 实战演练:基于kimi与快马平台快速开发一个交互式销售数据可视化看板
  • 代码随想录算法训练营第十天|LeetCode 232 用栈实现队列、LeetCode 225 用队列实现栈、LeetCode 20 有效的括号、LeetCode 1047 删除字符串中的所有相邻重复项
  • LabWindows/CVI报错
  • MCMC可视化指南:用动画理解马尔可夫链的收敛过程
  • Java智能地址解析工具address-parse:从混乱文本到结构化数据的终极解决方案
  • OpenClaw+Qwen3.5-9B:自动化竞品监测与分析报告生成
  • 小白也能懂的EmbeddingGemma-300m:用Ollama一键部署嵌入模型
  • 实时手机检测-通用企业应用案例:手机回收站自动分拣系统集成
  • 2026年热门的耐震压力表/隔膜压力表优质供应商推荐(信赖) - 行业平台推荐
  • Windows Cleaner终极指南:3步解决C盘爆红的免费神器!
  • 造相-Z-Image-Turbo亚洲美女LoRA实战:小宇宙播客封面图情绪传达技巧