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

2.1 路径问题专题:LeetCode 62. 不同路径

动态规划解决LeetCode 62题:不同路径问题

1. 题目链接

LeetCode 62. 不同路径

2. 题目描述

一个机器人位于一个 m x n 网格的左上角(起点标记为“Start”)。机器人每次只能向右或向下移动一步。机器人试图达到网格的右下角(标记为“Finish”)。问总共有多少条不同的路径?

示例

  • 输入:m = 3, n = 7
  • 输出:28

3. 示例分析

m = 2, n = 2 为例,机器人需要从 (0,0) 移动到 (1,1),可能的路径有两条:

  1. 向右 -> 向下
  2. 向下 -> 向右

动态规划表格初始化后,每个位置的值表示到达该位置的路径数。通过逐步填充表格,最终得到右下角的值即为答案。

4. 算法思路

动态规划状态定义

  • 定义 dp[i][j] 表示从起点 (0,0) 到达 (i-1, j-1) 位置的路径数(这里 ij1 开始,避免越界)。

状态转移方程

  • 每个位置的路径数等于上方和左方位置的路径数之和:
    dp[i][j] = dp[i-1][j] + dp[i][j-1]

初始化技巧

  • 初始化 dp[0][1] = 1,使得当计算 dp[1][1] 时,能够正确推导出初始值 1。通过这种方式,无需单独处理第一行和第一列的初始化。

5. 边界条件与注意事项

  1. 网格维度为 1x1:直接返回 1
  2. 网格只有一行或一列:路径数始终为 1
  3. 索引处理:由于 dp 数组的维度为 (m+1) x (n+1),遍历时需从 i=1j=1 开始。

6. 代码实现

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
        dp[0][1] = 1; // 巧妙初始化,便于计算第一格

        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }

        return dp[m][n];
    }
};

代码解析

  • 初始化dp[0][1] = 1 使得 dp[1][1] = 1,无需单独处理第一行或列。
  • 双重循环:按行优先顺序填充表格,确保每个位置的上方和左方已被计算。
  • 返回值:最终结果存储在 dp[m][n],对应右下角的位置。

通过动态规划方法,时间复杂度为 O(mn),空间复杂度为 O(mn)。此方法直观且易于理解,适合处理中等规模的网格路径问题。

相关文章:

  • 个人简历在线制作免费专业的seo外包公司
  • 模具配件东莞网站建设技术支持全国十大跨境电商排名
  • 网站备案名称能重复吗成都建设网官网
  • 关于网站开发的外文翻译有哪些网站可以免费发布广告
  • wordpress使用指南百度seo排名优化软件
  • 有没有免费b2b平台百度seo排名360
  • Linux离线安装redis,并配置redis集群
  • Linux 基础入门操作 前言 linux操作指令介绍
  • 15. 远程服务器运行jemter的GUI方式
  • 我的世界1.20.1forge模组开发进阶教程——TerraBlender
  • Java网络编程NIO
  • 数据结构与算法--图论
  • C++设计模式总结-汇总了全部23种设计模式的详细说明
  • fastapi完全离线环境(无外网)的访问Swagger所做特殊处理
  • 详解 MySQL 中的索引
  • LLM架构解析:循环神经网络(RNN)(第三部分)—— 从基础原理到实践应用的深度探索
  • SAP学习笔记 - 豆知识18 - (TODO)Msg 番号 ME154 構成品目无法決定
  • 网络:华为数通HCIA学习:静态路由基础
  • 虚拟电商-话费充值业务(四)供应商轮转逻辑
  • MySQL-SQL-DDL语句、表结构创建语句
  • 覆盖学术、职场、生活的专业计算工具
  • Vue面试常考内容[从宏观到微观]
  • 在 IntelliJ IDEA 2019 中安装/启用 PlantUML 插件
  • MySQL全链路指南
  • 常考题:通过解方程组求矩阵
  • mysql-MRR优化技术