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

多维动态规划题解——不同路径【LeetCode】递推写法空间优化

62. 不同路径

基础记忆化搜索写法请参考之前的文章,链接如下

多维动态规划题解——不同路径【LeetCode】记忆化搜索-CSDN博客

基础递推写法实现

此处是基于之前的记忆化搜索写法进行对应翻译得到的

class Solution:def uniquePaths(self, m: int, n: int) -> int:f = [[0] * (n + 1) for _ in range(m + 1)]f[0][1] = 1for i in range(m):for j in range(n):f[i + 1][j + 1] = f[i][j + 1] + f[i + 1][j]return f[m][n]

空间优化


一、算法逻辑(逐步思路)

❓ 题目简介

  • 给定一个大小为 m x n 的网格(左上角为起点,右下角为终点),机器人每次只能向右或向下移动一步,问:从左上角走到右下角,有多少条不同的路径?

✅ 思路解析(DP + 空间优化)

1. 定义状态:
  • 使用一维数组 f[j] 表示当前行中,到达第 j 列所需要的路径数量;
  • 为什么一维就够?因为第 i 行的路径数只依赖于上一行和当前行左侧的位置。
2. 初始化:
f = [0] * (n + 1)
f[1] = 1
  • f[1] = 1 表示第一行第一列的路径数量为 1;
  • 注意,这里将索引偏移一位(f[1] 对应网格中第 0 列),是为了简化边界处理(避免 j-1 越界)。
3. 状态转移:
for _ in range(m):for j in range(n):f[j + 1] += f[j]
  • 外层循环跑 m 行;
  • 内层循环中,f[j+1] += f[j] 意思是:从左边 j 位置可以走到 j+1 位置;
  • 相当于:
    • f[j+1] = 上一轮的 f[j+1](来自上方) + 当前轮的 f[j](来自左边)
4. 返回结果:
  • f[n] 就是最终到达右下角所需的路径数。

二、算法核心点

✅ 核心思想:二维路径 DP 的一维数组压缩版

  • dp[i][j] = dp[i-1][j] + dp[i][j-1] 压缩为一维数组;
  • 每次只保留一行数据,在原数组上进行就地更新;
  • 本质是从左到右不断累加路径数。

三、复杂度分析

  • 时间复杂度:O(m × n)
    • 遍历每个格子一次,共 m 行 n 列。
  • 空间复杂度:O(n)
    • 使用一维数组保存状态。

总结表:

维度

内容

✅ 思路逻辑

一维数组压缩的 DP,每个位置累加来自左侧和上方的路径数

✅ 核心技巧

滚动数组优化空间;偏移 1 位避免边界判断;内层循环从左到右确保顺序正确

✅ 时间复杂度

O(m × n)

✅ 空间复杂度

O(n)


🔍 补充说明(偏移技巧):

  • 为什么用 f[1] = 1 而不是 f[0] = 1
    • 因为循环中我们用的是 f[j+1]f[j],偏移一位可避免对边界做特殊处理;
    • 这样初始化只需设定一个值,逻辑更简洁。
http://www.dtcms.com/a/281832.html

相关文章:

  • 【Qt开发】Qt的背景介绍(二)-> 搭建Qt开发环境
  • 从混沌到秩序:数据科学的热力学第二定律破局——线性回归的熵减模型 × 最小二乘的能量最小化 × 梯度下降的负反馈控制系统,用物理定律重构智能算法的统一场论
  • Blender 云渲染高效流程:渲染 101 集群加速实战​
  • 硬件产品的技术资料管控是确保研发可追溯、生产可复制、质量可控制的核心环节。
  • Linux 716 数据库迁移
  • NodeJS Express 静态文件、中间件、路由案例
  • iPhone 数据擦除软件评测(最新且全面)
  • 为什么要使用nginx?
  • 网络基础10 业务访问控制--ACL与包过滤
  • springboot如何redis锁
  • python学习---dayday6
  • 基于华为欧拉系统安装FileGator文件管理器
  • git本地的操作
  • Java 增强 switch 语句详解:从基础到进阶的全面指南
  • 基于conda包的环境创建、激活、管理与删除
  • 如何卸载SQLServer
  • MybatisPlus由浅入深
  • Neo4j Python 驱动库完整教程(带输入输出示例)
  • Supervisor 使用教程:进程守护的最佳实践指南
  • 06-C语言:第06天笔记
  • 数据分析与AI丨从传感器到智能决策:数据驱动企业发展与 ESG 创新的全链路实践
  • 18.理解 Python 中的切片赋值
  • OpenCV-Python Tutorial : A Candy from Official Main Page(三)
  • Redis原理之持久化
  • 【构建 SHAP 解释器】X:每个样本的特征表(不能含 label,否则解释不纯粹)。
  • 隐私计算四大主流开源框架:从学术研究到工业落地,附PySyft实战Demo
  • 梁的振动特征函数分析2
  • 智驾芯片软件分层测试
  • kdump生成转储文件调试内核崩溃、死机
  • 电涡流位移测量技术深度解密