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

二刷 LeetCode:62. 不同路径 64. 最小路径和 复盘笔记

目录

一、62. 不同路径

题目回顾

思路复盘

1. DP 思路

2. Python 代码实现

3. 空间优化(O (n))

易错点 & 二刷心得

二、64. 最小路径和

题目回顾

思路复盘

1. DP 思路

2. Python 代码实现(原地修改,空间 O (1))

3. 一维空间优化(O (n))

易错点 & 二刷心得

三、两道题的共性总结 & 二刷收获


这两道题是二维动态规划的入门经典,也是面试中高频考点,非常适合作为 DP 算法的练手模板题。二刷时,我们重点拆解思路、对比不同解法,并总结通用的 DP 解题框架。


一、62. 不同路径

题目回顾

一个机器人位于一个m x n网格的左上角,它每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?

思路复盘

这道题是典型的二维动态规划问题,核心是找到状态转移方程。

1. DP 思路
  • 状态定义dp[i][j]表示从起点(0,0)走到(i,j)的不同路径数。
  • 状态转移:因为只能从上方(i-1,j)或左方(i,j-1)过来,所以:dp[i][j] = dp[i-1][j] + dp[i][j-1]
  • 初始状态
    • 第一行dp[0][j]:只能一直向右走,所以路径数都为 1。
    • 第一列dp[i][0]:只能一直向下走,所以路径数都为 1。
  • 结果dp[m-1][n-1]
2. Python 代码实现

python

运行

def uniquePaths(m: int, n: int) -> int: # 创建DP表 dp = [[1] * n for _ in range(m)] # 遍历填充表格 for i in range(1, m): for j in range(1, n): dp[i][j] = dp[i-1][j] + dp[i][j-1] return dp[m-1][n-1]
3. 空间优化(O (n))

由于dp[i][j]只依赖上一行的dp[i-1][j]和当前行的dp[i][j-1],我们可以用一维数组滚动更新:

python

运行

def uniquePaths(m: int, n: int) -> int: dp = [1] * n for i in range(1, m): for j in range(1, n): dp[j] = dp[j] + dp[j-1] return dp[-1]

易错点 & 二刷心得

  1. 初始状态处理:第一行和第一列必须初始化为 1,这是很多新手容易漏掉的细节。
  2. 方向限制:题目规定只能向右或向下移动,这是 DP 转移方程成立的前提,如果允许其他方向,解法会完全不同。
  3. 优化技巧:二维 DP 转一维的关键在于理解 “滚动更新”,用一维数组覆盖上一行的数据,大幅降低空间复杂度。

二、64. 最小路径和

题目回顾

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

思路复盘

这道题是上一题的进阶版,同样是二维 DP,但目标从 “求路径数” 变成了 “求路径和的最小值”。

1. DP 思路
  • 状态定义dp[i][j]表示从起点走到(i,j)的最小路径和。
  • 状态转移:到达(i,j)只能从上方或左方来,所以:dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
  • 初始状态
    • 第一行:只能从左边来,dp[0][j] = dp[0][j-1] + grid[0][j]
    • 第一列:只能从上方来,dp[i][0] = dp[i-1][0] + grid[i][0]
  • 结果dp[m-1][n-1]
2. Python 代码实现(原地修改,空间 O (1))

python

运行

def minPathSum(grid: list[list[int]]) -> int: m, n = len(grid), len(grid[0]) # 初始化第一行 for j in range(1, n): grid[0][j] += grid[0][j-1] # 初始化第一列 for i in range(1, m): grid[i][0] += grid[i-1][0] # 填充表格 for i in range(1, m): for j in range(1, n): grid[i][j] += min(grid[i-1][j], grid[i][j-1]) return grid[m-1][n-1]
3. 一维空间优化(O (n))

python

运行

def minPathSum(grid: list[list[int]]) -> int: m, n = len(grid), len(grid[0]) dp = [0] * n dp[0] = grid[0][0] # 初始化第一行 for j in range(1, n): dp[j] = dp[j-1] + grid[0][j] for i in range(1, m): dp[0] += grid[i][0] # 更新第一列 for j in range(1, n): dp[j] = min(dp[j], dp[j-1]) + grid[i][j] return dp[-1]

易错点 & 二刷心得

  1. 原地修改:这道题可以直接修改原数组作为 DP 表,空间复杂度降到 O (1),这是面试中加分的优化技巧。
  2. 初始状态的累加:第一行和第一列的初始化不是简单的赋值,而是需要累加前面的路径和。
  3. 和上一题的对比:两道题的 DP 框架完全一致,只是状态转移方程从 “相加” 变成了 “取最小再相加”,这体现了 DP 题目的 “万变不离其宗”。

三、两道题的共性总结 & 二刷收获

  1. 二维 DP 的通用解题模板
    1. 定义状态:明确dp[i][j]的含义。
    2. 找出转移方程:根据题目限制(如移动方向),写出dp[i][j]与之前状态的关系。
    3. 初始化边界:处理第一行、第一列等特殊情况。
    4. 按顺序填充:通常按行优先或列优先的顺序遍历表格。
    5. 优化空间:思考是否可以用一维数组或原地修改优化空间。
  2. 面试高频考点
    • 这类网格 DP 问题是动态规划入门的必考题,重点考察状态定义和转移方程的推导。
    • 优化空间复杂度的思路(从二维到一维,再到原地修改)是面试中常被追问的点。
  3. 二刷的意义
    • 第一次做可能只会暴力 DP,二刷时要重点思考优化空间和通用模板。
    • 这两道题可以作为所有网格 DP 问题的 “母题”,后续遇到类似题目(如带障碍物、带权重的网格),都可以套用这个框架。
http://www.cnnetsun.cn/news/2217345.html

相关文章:

  • RKNN模型量化精度上不去?试试这招混合量化与精度分析工具
  • 终极指南:如何快速将网易云音乐NCM文件转换为MP3/FLAC格式
  • 在智能客服场景中利用 Taotoken 聚合多模型提升回答质量
  • 保姆级教程:用Kali和VMware从零搭建DC1靶场(附全套工具包下载)
  • GBFR Logs:5大功能让你的碧蓝幻想Relink伤害分析更精准
  • 内容创作团队集成 Taotoken 为文案生成提供多模型后备方案
  • pynput入门指南:如何用Python实现跨平台自动化操作
  • 基于粒子群PSO、灰狼GWO、鲸鱼WOA、哈里斯鹰HHO、蜣螂DBO、麻雀SSA算法的无人机三维路径规划与多成本函数对比研究(Matlab代码实现)
  • 终极HS2-HF Patch完整指南:200+插件一键安装,彻底解决Honey Select 2兼容性问题
  • 植物大战僵尸终极修改器:5分钟快速掌握PVZ Toolkit完全指南 [特殊字符]
  • 告别下载等待:九大网盘直链解析工具完全指南
  • Betaflight开源飞控固件:从架构设计到高级调优的完整教程
  • Next.js SEO优化器实战:从原理到应用,提升网站搜索排名
  • 从零开始:用Happy Island Designer打造你的梦幻动物森友会岛屿
  • 如何用Happy Island Designer在10分钟内完成完美岛屿布局规划
  • 在 ABAP Server 里让 WS Provider 接受 SAML Token Profile,STS 信任与 Web Service Policy 的落地点
  • 互联网大厂 Java 求职面试:从音视频场景谈起
  • 5分钟终极指南:用罗技鼠标宏彻底解决绝地求生压枪难题
  • 镍在不同温度下的密度计算方法
  • 3分钟搞定NVIDIA显卡色彩校准:novideo_srgb让你的显示器色彩更准确
  • Go语言实现本地大模型推理:llama.go架构解析与工程实践
  • 基于Slash Command Manager构建企业级协作平台命令中枢
  • 完全掌握Windows Cleaner:高效解决C盘空间不足的终极指南
  • 19-基于Flask的哔哩哔哩综合指数UP榜单数据分析系统的设计与实现
  • 暗黑破坏神2存档修改器终极指南:5分钟掌握d2s-editor的完整使用教程
  • 为开源项目 Hermes Agent 配置 Taotoken 作为自定义模型提供商
  • SigmaGPT:开源AI助手在教育场景的架构设计与工程实践
  • 初识JAVA(基本概念)
  • 波斯语音频处理技术挑战与PARSA-Bench评估体系
  • 3步掌握哔咔漫画下载器:打造个人永久漫画库的终极方案