力扣第62题 不同路径 c++ 动态规划 dp二维 + dp一维 解法

news2025/7/21 19:52:02

题目

62. 不同路径

中等

相关标签

数学   动态规划   组合数学

一个机器人位于一个 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

提示:

  • 1 <= m, n <= 100
  • 题目数据保证答案小于等于 2 * 109

思路和解题方法

  1. 首先,创建一个大小为m×n的二维数组dp,并将所有元素初始化为0。这个二维数组用于保存到达每个位置的唯一路径数量。
  2. 然后,通过两个循环分别将第一行和第一列的元素设置为1。因为从起点出发,只有一条路径可以到达第一行和第一列的任意位置。
  3. 接下来,使用两个嵌套的循环遍历除第一行和第一列之外的其他位置。对于每个位置(i, j),它可以从上方的位置(i-1, j)或左边的位置(i, j-1)到达。因此,到达当前位置的唯一路径数量等于到达上方位置和左边位置的唯一路径数量之和,即dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
  4. 最后,返回dp[m - 1][n - 1],即到达右下角位置的唯一路径数量。

复杂度

        时间复杂度:

                O(m*n)

        时间复杂度为O(m*n),其中m和n分别是网格的行数和列数。这是因为代码中使用了两个嵌套的循环来遍历整个网格,所以时间复杂度与网格的大小成正比。

        空间复杂度

                O(n)

        空间复杂度为O(n),其中n是网格的列数。这是因为代码使用了一个大小为n的一维数组dp来保存到达每个位置的路径数。在算法执行过程中,只需要不断更新这个数组中的元素,所以只占用了常数级别的额外空间。因此,空间复杂度与网格的大小无关。

c++ 代码

class Solution {
public:
    int uniquePaths(int m, int n) {
        // 创建一个大小为m×n的二维数组,用于保存到达每个位置的唯一路径数量
        vector<vector<int>> dp(m, vector<int>(n, 0));
        
        // 将第一行的所有元素设置为1,因为从起点出发只有一条路径可以到达第一行的任意位置
        for (int i = 0; i < m; i++)
            dp[i][0] = 1;
        
        // 将第一列的所有元素设置为1,因为从起点出发只有一条路径可以到达第一列的任意位置
        for (int j = 0; j < n; j++)
            dp[0][j] = 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 - 1][n - 1];
    }
};

优化空间代码

class Solution {
public:
    int uniquePaths(int m, int n) {
        // 创建一个大小为n的一维数组dp,用于保存到达每个位置的路径数
        vector<int> dp(n);
        
        // 初始化dp数组,将第一行的路径数都设置为1
        for (int i = 0; i < n; i++) {
            dp[i] = 1;
        }
        
        // 使用动态规划的思想计算到达每个位置的路径数
        for (int j = 1; j < m; j++) {
            for (int i = 1; i < n; i++) {
                // 当前位置的路径数等于上方位置的路径数加左侧位置的路径数
                dp[i] += dp[i - 1];
            }
        }
        
        // 返回到达右下角位置的路径数,即dp数组的最后一个元素
        return dp[n - 1];
    }
};

解释

  1. 首先,创建一个大小为n的一维数组dp,用于保存到达每个位置的路径数。
  2. 然后,初始化dp数组,将第一行的路径数都设置为1,因为在第一行的任意位置,只能向右移动,所以只有一条路径可选。
  3. 接着,使用动态规划的思想计算到达每个位置的路径数。从第二行开始遍历到第m行,在每一行中,从第二列开始遍历到第n列,在每次循环中,当前位置的路径数等于上方位置的路径数加左侧位置的路径数,即dp[i] += dp[i - 1]
  4. 最后,返回到达右下角位置的路径数,即dp数组的最后一个元素。
  5. 时间复杂度:O(m × n)
  6. 空间复杂度:O(n)

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1157161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes异常?别担心,100个命令来解救你

关注【云原生百宝箱】公众号&#xff0c;快速掌握云原生 这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。作者列出了 100 个 Kubectl 命令&#xff0c;这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于&#xff1a; 集群信息Pod 诊断服务诊断…

一款成熟的文件外发审计管控系统,应该具备哪些价值?

在信息化高速发展的时代&#xff0c;电子文件泄密事件层出不穷&#xff0c;比如文本文档、图像、音频、视频、电子表格等&#xff0c;都是日常会接触到的文件类型。像制造业企业&#xff0c;会有比较多的上下游协作交流&#xff0c;外发的电子文档以明文的形式提供给合作伙伴&a…

信号类型(通信)——QAM调制信号

系列文章目录 《信号类型&#xff08;通信&#xff09;——仿真》 文章目录 前言 一、原理图 二、仿真 2.1、QAM仿真 2.2、不同滚降系数 2.3、不同M下QAM调制对比 总结 前言 本文主要结合仿真分析了QAM的信号处理过程&#xff0c;并简单分析了成型滤波器中的滚降系数对QA…

开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化

开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化 前言一、GSYVideoPlayer&#x1f525;&#x1f525;&#x1f525;是什么&#xff1f;二、简单使用1.First、在project下的build.gradle添加2.按需导入3. 常用代码 rtsp流的优化大功告成 总结 前言 本文介绍&#xff0c;…

Kafka - 监控工具 Kafka Eagle:实时洞察Kafka集群的利器

文章目录 引言Kafka Eagle简介Kafka Eagle的特点Kafka Eagle的优势使用Kafka Eagle的步骤结论 引言 在现代大数据架构中&#xff0c;Apache Kafka已成为一个不可或缺的组件&#xff0c;用于可靠地处理和传输大规模的数据流。然而&#xff0c;随着Kafka集群规模的不断增长&…

私募证券基金动态-23年9月报

成交量&#xff1a;9月日均7,197.15亿元 2023年9月A股两市日均成交7,197.15亿元&#xff0c;环比下降12.78%、同比下降1.38%&#xff0c;为近2年单月日均成交最低的月份。9月整体20个交易日&#xff0c;单日成交金额最高没有过万亿&#xff0c;单日最低破6000亿&#xff0c;仅…

博弈论学习笔记(2)——完全信息静态博弈

前言 这部分我们学习的是完全信息静态博弈&#xff0c;主要内容包括博弈论的基本概念、战略式博弈、Nash均衡、Nash均衡解的特性、以及Nash均衡的应用。 零、绪论 1、什么是博弈论 1&#xff09;博弈的定义 博弈论&#xff1a;研究决策主体的行为发生直接相互作用时候的决策…

蓝桥杯 (C++ 求和 等差数列 顺子日期 灌溉)

目录 1、求和 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 1、求和 题目&#xff1a; 思路&#xff1a; 1、首先想到的是两重遍历&#xff0c;累加和。但是当n取200000时&#xff0c;会超时&#xff0c;所以暴力的遍历没有办法通过全部案例。 2、将公式变形得到…

AI先行者第一辑:AI for Science 要坚持高压强投入

‍‍ 中国在AI for Science的基础还非常的薄弱&#xff0c;且非短期内可以提升&#xff0c;需要有一个长期性的计划&#xff0c;也需要有足够的金钱投入和人才队伍建设。 本篇作者褚学森&#xff0c;中国船舶科学研究中心、深海技术科学太湖实验室 研究员&#xff1b;新兴技术研…

代码随想录算法训练营第四十天丨 动态规划part03

343. 整数拆分 思路 看到这道题目&#xff0c;都会想拆成两个呢&#xff0c;还是三个呢&#xff0c;还是四个.... 来看一下如何使用动规来解决。 动态规划 动规五部曲&#xff0c;分析如下&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i]…

DNS 域名解析系统

文章目录 前言什么是 DNS 域名解析系统为什么需要 DNS 域名解析DNS 是如何发展的hosts 文件维护域名和IP的映射关系DNS 系统&#xff08;服务器&#xff09;DNS 镜像系统 前言 前面为大家分享了关于计算机网络中应用层——自定义协议、传输层——UDP、TCP 协议、网络层——IP协…

怎样用ps把人物皮肤磨皮,人物皮肤磨皮怎么办

品牌型号:联想GeekPro 2020 系统: Windows 10 64位专业版 软件版本: portraiture 3.5.6 皮肤瑕疵是人像拍摄中比较容易出现的问题&#xff0c;对于皮肤瑕疵后期一般会使用磨皮的方法处理。那么&#xff0c;怎样用ps把人物皮肤磨皮&#xff1f;ps磨皮的工具丰富多样&#xff…

如何在不同的系统中查找IP地址

知道如何找到你的IP地址是我们大多数人在日常生活中很少使用的技能&#xff0c;但当你需要的时候&#xff0c;这是一种你会感激的技能——尤其是如果你运行的是最好的Wi-Fi路由器之一。 当你从事家庭网络项目时&#xff0c;知道你的IP地址很重要&#xff0c;一旦你知道了基本知…

倾斜摄影三维模型数据几何坐标重建方法分析

倾斜摄影三维模型数据几何坐标重建方法分析 利用几何坐标变换等技术实现倾斜摄影三维模型数据的坐标重建&#xff0c;可以采用以下方法&#xff1a; 1、数据准备&#xff1a;首先&#xff0c;需要获取倾斜摄影影像数据。这些影像应包含多个视角下的拍摄图像&#xff0c;并覆盖…

docker--基本操作

第 1 章 Docker基础 1.1 docker简介 在这一部分我们主要讲两个方面&#xff1a; docker是什么、docker特点 1.1.1 docker是什么 docker是什么&#xff1f; docker的中文解释是码头工人。 官方解释&#xff1a; Docker是一个开源的容器引擎&#xff0c;它基于LCX容器技术&…

最新广告联盟系统源码/实时监控移动广告联盟系统/多元化合作推广方式+支持各种广告效果

源码简介&#xff1a; 最新广告联盟系统源码&#xff0c;作为实时监控移动广告联盟&#xff0c;它有着多元化合作推广方式&#xff0c;并支持各种广告效果。它是最新版本、功能强大的广告联盟系统。 诚丰广告联盟系统的单台服务器每天能够承受至少2000万个PV流量&#xff0c;并…

前端(二十六)——常见的HTTP异常状态码以及正反向代理配置

&#x1f475;博主&#xff1a;小猫娃来啦 &#x1f475;文章核心&#xff1a;前端常见的HTTP异常状态码以及正反向代理配置 文章目录 前端常见的HTTP异常状态码404 - 未找到资源403 - 禁止访问304 - 未修改500 - 服务器内部错误 正反向代理配置重要性本地正向代理配置服务器配…

GhostNet(CVPR 2020)学习笔记 (附代码)

论文地址&#xff1a;​​​​​​https://arxiv.org/abs/1911.11907v2 代码地址&#xff1a;https://github.com/huawei-noah/Efficient-AI-Backbones/blob/master/ghostnet_pytorch/ghostnet.py 1.是什么&#xff1f; Ghost module是一种模型压缩的方法&#xff0c;它可以…

韦东山D1S板子——利用xfel工具初始化内置64MB内存,并直接下载程序到内存运行

1、前言 &#xff08;1&#xff09;最近使用韦东山老师的D1S板子学习RISC-V架构知识&#xff0c;我是结合《RISC-V体系结构编程与实践》这本书的进行学习&#xff0c;其中韦东山老师对书中的代码做了部分移植&#xff0c;到MMU模块就没有在移植书中代码&#xff1b; &#xff0…

从小白到大牛:Linux嵌入式系统开发的完整指南

Linux嵌入式系统开发一直是一个激动人心的领域&#xff0c;吸引着越来越多的开发者。无论你是初学者还是已经有一些经验的开发者&#xff0c;本文将为你提供从小白到大牛的完整指南&#xff0c;帮助你掌握Linux嵌入式系统开发的关键概念和技能。我们将深入探讨Linux内核、设备驱…