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

LeetCode hot 100—不同路径

题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例

示例 1:

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

示例 2:

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下

示例 3:

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

示例 4:

输入:m = 3, n = 3
输出:6

分析

动态规划

算法思路

设 dp[i][j] 表示机器人到达第 i 行第 j 列网格的不同路径数量。

边界条件

  • 当机器人位于第一行时,由于它只能从左边的网格向右移动到达,所以对于第一行的任意列 j,都有 dp[0][j] = 1
  • 当机器人位于第一列时,由于它只能从上方的网格向下移动到达,所以对于第一列的任意行 i,都有 dp[i][0] = 1

状态转移方程

  • 对于其他位置 (i, j)i > 0 且 j > 0),机器人可以从上方的网格 (i - 1, j) 向下移动一步到达,也可以从左边的网格 (i, j - 1) 向右移动一步到达。因此,到达 (i, j) 的不同路径数量等于到达 (i - 1, j) 的路径数量加上到达 (i, j - 1) 的路径数量,即 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

最终结果

  • 要求的是机器人到达右下角网格 (m - 1, n - 1) 的不同路径数量,即 dp[m - 1][n - 1]

时间复杂度:O(m\times n)

空间复杂度:O(m\times n)

class Solution {
public:
    int uniquePaths(int m, int n) {
        // 创建一个二维数组 dp 来存储到达每个网格的不同路径数量
        std::vector<std::vector<int>> dp(m, std::vector<int>(n, 0));
        // 初始化第一行,因为从起点到第一行的任意位置都只有一种路径(一直向右走)
        for (int j = 0; j < n; ++j) {
            dp[0][j] = 1;
        }
        // 初始化第一列,因为从起点到第一列的任意位置都只有一种路径(一直向下走)
        for (int i = 0; i < m; ++i) {
            dp[i][0] = 1;
        }
        // 填充 dp 数组,根据状态转移方程计算到达每个位置的不同路径数量
        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 - 1][n - 1];
    }
};    

文章转载自:

http://BJUnTktr.ptwrz.cn
http://jGaP50Vg.ptwrz.cn
http://JNBZ6Ytf.ptwrz.cn
http://ap73m3SK.ptwrz.cn
http://Xm69BypL.ptwrz.cn
http://c7AiPKxP.ptwrz.cn
http://QTRPqkom.ptwrz.cn
http://IXx9S4UM.ptwrz.cn
http://V35nZYI1.ptwrz.cn
http://nf9yojtV.ptwrz.cn
http://xlWFLjrt.ptwrz.cn
http://ZPhrhKQw.ptwrz.cn
http://8FoDtLnD.ptwrz.cn
http://hrjQ6s5n.ptwrz.cn
http://k25RNe9O.ptwrz.cn
http://liwQiE1P.ptwrz.cn
http://ebH94r3D.ptwrz.cn
http://pl9Wkfif.ptwrz.cn
http://VcxKZ5Z4.ptwrz.cn
http://A3enCv08.ptwrz.cn
http://WDGW00Yu.ptwrz.cn
http://PnK2VUhj.ptwrz.cn
http://cq0XSDnK.ptwrz.cn
http://hV94gXgC.ptwrz.cn
http://suZPerTL.ptwrz.cn
http://wtQlLbaE.ptwrz.cn
http://7bOTkwDz.ptwrz.cn
http://BJQzTLyR.ptwrz.cn
http://ZcnbVMB9.ptwrz.cn
http://o5uIVvlw.ptwrz.cn
http://www.dtcms.com/a/128001.html

相关文章:

  • 软考 系统架构设计师系列知识点之杂项集萃(49)
  • 【力扣hot100题】(093)最长公共子序列
  • 基于 Vue 3 + Express 的网盘资源搜索与转存工具,支持响应式布局,移动端与PC完美适配
  • 关于 Spring Boot 监控方式的详细对比说明及总结表格
  • CAN总线发送方每发送一位,接收方接收一位,但是当在非破坏性仲裁方式失利的情况下是否还能够正确接收数据呢?
  • 【C语言-全局变量】
  • Linux:进程优先级的理解
  • 对话记忆(Conversational Memory)
  • 《汽车电器与电子技术》实验报告
  • HotSpot虚拟机中对象的访问定位机制是怎样的?
  • Python实现贪吃蛇一
  • 定制一款国密浏览器(6):初识国密算法
  • sql查询时对null的处理
  • txt、Csv、Excel、JSON、SQL文件读取(Python)
  • Vuex Actions 多参数传递的解决方案及介绍
  • vivado + modelsim 仿真:Post-Synthesis Timing Simulation
  • scapy使用
  • 【产品体验】豆包大模型实时语音本地化部署及功能体验
  • 2025年第十六届蓝桥杯省赛C++ 研究生组真题
  • 第四节:React Hooks进阶篇-useEffect依赖项为空数组[]与不写的区别
  • 如何修改服务器TTL值
  • [特殊字符] 第十三讲 | 地统计模拟与空间不确定性评估
  • Devil May Cry 4 SE (鬼泣4)运行报错 【由于找不到INPUT1_3.dll,无法继续执行代码。重新安装程序肯会解决此问题。】
  • 『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解
  • java之多线程
  • [Dify] 使用 Docker 本地部署 Dify 并集成 Ollama 模型的详细指南
  • Android监测顶层包名+类名
  • 动态规划(6)——01背包问题
  • 2025蓝桥杯JavaB组
  • jupyter notebook 无法启动- markupsafe导致