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

题目

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数组,将第一行的路径数都设置为1for (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.mzph.cn/news/126241.shtml

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

相关文章

【QT】鼠标常用事件

新建项目 加标签控件 当鼠标进去&#xff0c;显示【鼠标进入】&#xff0c;离开时显示【鼠标离开】 将QLable提升成自己的控件&#xff0c;然后再去捕获 添加文件 改继承的类名 提升类 同一个父类&#xff0c;可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…

Android与IOS渲染流程对比

目录 Android CPU计算图元信息 GPU干预 几何阶段等后处理 Android APP通过WindowManager统一提供所有Surface的缓冲区【不管是SurfaceView还是普通的布局流程都会将数据提交到Surface的BufferQuene中】 Java中的Surface是null&#xff0c;最终都是由Native层的Surface处理。…

科研迷雾:读研以来,我发现的科研界“怪象”

1 引言 随着读论文和做实验的增多&#xff0c;我发现了sci的很多猫腻经不起细细推敲&#xff0c;原来科研并不如我想象的神圣&#xff0c;还不如工业界来的实在&#xff0c;因为在工业界做项目出现问题&#xff0c;客户是验收不了不给付钱的。所以论文只是一个玩具。 2 常见的…

大数据预处理与采集实验三:Urllib的GET和POST请求(1)

目录 Urllib基本操作-GET ➢没有进行utf-8编码的输出 ➢经过utf-8decode之后的输出 ➢ Timeout参数&#xff1a;捕获由于连接超时而引发的异常 ◆Urllib基本操作-定制请求头 ➢ 在GET请求中加入多个访问参数 ◆Urllib基本操作-POST ➢有道词典网页爬取&#xff1a;找到…

libpcap获取数据包

一、用户空间 以Linux以及TPACKET_V3为例。 调用pcap_dispatch获取数据包&#xff0c;然后回调用户传递的数据包处理函数。 read_op实际调用的是pcap_read_linux_mmap_v3 // pcap.c int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user) {return (p-…

钡铼技术助力ARM工控机在智慧交通中的创新应用

在交通运输领域&#xff0c;钡铼技术ARM工控机可以实现以下功能&#xff1a; 实时监控和管理&#xff1a;利用钡铼技术ARM工控机&#xff0c;可以对交通运输中的车辆、船只、飞机等进行实时监测和管理&#xff0c;帮助调度员提高车辆调度和路线规划的准确性和效率。 安全保障&…

Vue 3.0中Treeshaking特性是什么?

一、是什么 Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术&#xff0c;专业术语叫 Dead code elimination 简单来讲&#xff0c;就是在保持代码运行结果不变的前提下&#xff0c;去除无用的代码 如果把代码打包比作制作蛋糕&#xff0c;传统的方式是把鸡…

js实现容器之间交换

&#x1f525;博客主页&#xff1a; 破浪前进 &#x1f516;系列专栏&#xff1a; Vue、React、PHP ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ JavaScript是一种非常流行和常用的编程语言&#xff0c;它在web开发中起着至关重要的作用&#xff0c;在实现网页动态交互、数据…

实时检测并识别视频中的汽车车牌

对于基于摄像头监控的安全系统来说,识别汽车牌照是一项非常重要的任务。我们可以使用一些计算机视觉技术从图像中提取车牌,然后我们可以使用光学字符识别来识别车牌号码。在这里,我将引导您完成此任务的整个过程。 要求: import cv2import numpy as npfrom skimage impor…

Android 原生定位开发(解决个别手机定位失败问题)

文章目录 前言一、实现步骤二、使用步骤1.服务启动工具类2.实现LocationService 总结 前言 在android开发中地图和定位是很多软件不可或缺的内容&#xff0c;这些特色功能也给人们带来了很多方便。定位一般分为三种发方案&#xff1a;即GPS定位、Google网络定位以及基站定位。…

黑马 小兔鲜儿 uniapp 小程序开发- 商品详情模块- day05

黑马 小兔鲜儿 uniapp 小程序开发- 分类模块- day04-CSDN博客 小兔鲜儿 - 商品详情(登录前)-day05 商品详情页分为两部分讲解&#xff1a; 登录前&#xff1a;展示商品信息&#xff0c;轮播图交互&#xff08;当前模块&#xff09;登录后&#xff1a;加入购物车&#xff0c;立…

Xcode中如何操作Git

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

[云原生案例1.] 构建LNMP架构并运行Wordpress个人博客平台

文章目录 1. 当前需求2. 前置准备3. 搭建过程3.1 创建自定义网络3.2 部署并配置nginx3.2.1 创建工作目录并上传相关软件包3.2.2 解压缩相关软件包3.2.3 编写Dockerfile文件3.2.4 编写nginx.conf文件3.2.5 创建nginx镜像3.2.6 运行容器 3.3 部署并配置mysql3.3.1 创建工作目录3.…

软件架构的概念

1.软件架构演化 为了适应用户的新需求、业务环境和运行环境的变化等&#xff0c;软件架构需要不断地进行自身的演化&#xff0c;也就是说软件架构的演化就是为了维持软件架构自身的有用性。 本质上讲&#xff0c;软件架构的演化就是软件整体结构的演化&#xff0c;演化过程涵盖…

Python机器学习基础(二)---数据可视化

一.简单图形生成 1.Pandas生成折线图 import pandas as pd import numpy as np from matplotlib import pyplot #生成10行4列 标准正态分布的数据 df pd.DataFrame(np.random.randn(10,4),indexpd.date_range(1/1/2000,periods10), columnslist(ABCD)) df.plot() print(np.r…

从零学算法10

10.给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 示例 1&#xff1a; 输入&#xff1a;s…

Docker(2)——Docker镜像的基本命令

目录 一、简介 二、基本命令 1. Docker命令官方文档 2. 展示镜像 3. 搜索镜像 4. 下载镜像 5. 删除镜像 一、简介 本篇文章是Docker专栏的第二章&#xff0c;主要用于介绍Docker镜像的一些基本命令 二、基本命令 1. Docker命令官方文档 本篇博客仅记录常用的Docker镜…

LeetCode 2433. 找出前缀异或的原始数组【位运算,数组】1366

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

分布式理论和分布式锁知识点总结

文章目录 (一) 分布式理论算法和协议1&#xff09;CAP理论总结 2&#xff09;BASE理论BASE 理论的核心思想基本可用软状态最终一致性 3&#xff09;Paxos算法Basic Paxos 算法4&#xff09; Raft算法1 拜占庭将军 5&#xff09;Gossip协议 (二) 分布式锁分布式锁应该具备哪些条…

89 柱状图中最大的矩形

柱状图中最大的矩形 类似接雨水&#xff08;反过来&#xff0c;相当于找接雨水最少的一段&#xff09;题解1 暴力搜索&#xff08;超时&#xff09; O ( N 2 ) O(N^2) O(N2)另一种 题解2 单调栈【重点学习】常数优化 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的…