力扣第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.rhkb.cn/news/176715.html

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

相关文章

电商课堂|5分钟了解电商数据分析完整流程,建议收藏!

账户效果下降&#xff0c;如何能够快速找到问题并优化调整&#xff1f; 相信百分之90%的竞价员都会说&#xff1a;“做数据分析。” 没错&#xff0c;数据分析能够帮助我们快速锁定问题所在&#xff0c;确定优化方向&#xff0c;还可以帮助我们找到流量控制的方向。那么做电商&…

译文:我们如何使 Elasticsearch 7.11 中的 date_histogram 聚合比以往更快

这篇文章是ES7.11版本的文章&#xff0c;主要学习的是思路&#xff0c;记录在这里留作以后参考用。 原文地址&#xff1a;https://www.elastic.co/cn/blog/how-we-made-date-histogram-aggregations-faster-than-ever-in-elasticsearch-7-11 正文开始&#xff1a; Elasticsea…

【C++的OpenCV】第十五课-OpenCV的绘图工具(rectangle、circle、line、polylines、putText)常用方法简介

&#x1f389;&#x1f389;&#x1f389; 欢迎各位来到小白 p i a o 的学习空间&#xff01; \color{red}{欢迎各位来到小白piao的学习空间&#xff01;} 欢迎各位来到小白piao的学习空间&#xff01;&#x1f389;&#x1f389;&#x1f389; &#x1f496; C\Python所有的入…

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

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

Linux基本网页访问--防火墙、服务管理、selinux强制访问

正常访问外部网络需要进行4部操作操作&#xff1a; 1、开启httpd服务systemctl restart httpd 2、关闭防火墙服务 systemctl stop firewalld 3、访问数据库时&#xff0c;需要开启数据库的服务systemctl restart mariadb 4、关闭强制访问 setenforce 0 1、防火墙管理 firewal…

有了定时关机,省时省力!如何在Windows 11中设置自动关机

你有时会忘记关闭Windows 11吗?如果是这样的话,也许你应该考虑安排关机时间,以确保你的电脑在忘记选择关机时也能关机。 当你需要等待大型游戏下载完成时,安排关闭也是一个好主意。你可以用一个相对简单的命令在Windows 11中设置自动关机。 计时器将在指定的倒计时时间过…

表白墙(服务器)

目录 0.需求 1.创建Maven项目 2.给pom.xml内引入三个依赖 3.完善目录&#xff0c;并补充web.xml中的内容 4.编写代码 后端代码 ​编辑前端代码 5.引入数据库 创建message表 创建工具类 往MessageServlet类中添加方法 0.需求 前面写好了表白墙页面&#xff0c;但存…

C# Onnx Ultra-Fast-Lane-Detection-v2 车道线检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; usi…

你真的会学习网络安全吗?

我敢说&#xff0c;现在网上90%的文章都没有把网络安全该学的东西讲清楚。 为什么&#xff1f;因为全网更多的都是在讲如何去渗透和公鸡&#xff0c;却没有把网安最注重的防御讲明白。 老话说得好&#xff1a;“攻击&#xff0c;是为了更好的防御。”如果连初衷都忘了&#xff…

数据结构和算法——用C语言实现所有图状结构及相关算法

文章目录 前言图的基本概念图的存储方式邻接矩阵邻接表十字链表临界多重表 图的遍历最小生成树普里姆算法&#xff08;Prim&#xff09;克鲁斯卡尔算法&#xff08;Kruskal&#xff09; 最短路径BFS求最短路径迪杰斯特拉算法&#xff08;Dijkstra&#xff09;弗洛伊德算法&…

Android Studio打包AAR

注意 依赖的Android Studio版本为4.2.2 更高的Android Studio版本使用方法可能有所不同&#xff0c;gradle的版本和gradle plugins的版本都会影响使用方式。 基于此&#xff0c;本文只能作为参考&#xff0c;而不能作为唯一答案&#xff0c;如果要完全依赖本文&#xff0c;则…

8年经验之谈 —— Redis的性能测试与优化!

Redis作为一种高性能的Key-Value数据库&#xff0c;一直受到众多开发者和企业的青睐。然而&#xff0c;在高并发、大数据存储的应用场景中&#xff0c;如何测试并优化Redis的性能&#xff0c;成为了问题。本文将从测试与优化两个方面来讲解如何达到最优的Redis性能。 一、性能…

深入浅出排序算法之计数排序

目录 1. 原理 2. 代码实现 3. 性能分析 1. 原理 首先看一个题目&#xff0c;有n个数&#xff0c;取值范围是 0~n&#xff0c;写出一个排序算法&#xff0c;要求时间复杂度和空间复杂度都是O(n)的。 为了达到这种效果&#xff0c;这一篇将会介绍一种不基于比较的排序方法。这…

K-means(K-均值)算法

K-means&#xff08;k-均值&#xff0c;也记为kmeans&#xff09;是聚类算法中的一种&#xff0c;由于其原理简单&#xff0c;可解释强&#xff0c;实现方便&#xff0c;收敛速度快&#xff0c;在数据挖掘、聚类分析、数据聚类、模式识别、金融风控、数据科学、智能营销和数据运…

我和云栖有个约会

云栖大会&#xff1a;聚焦创新&#xff0c;驱动未来 2009年&#xff0c;一场地方网站峰会在中国掀起了技术的浪潮。随着时间的推移&#xff0c;这场峰会逐渐演变成了全球领先的科技盛会——云栖大会。回首历史&#xff0c;云栖大会不仅是中国云计算产业发展的见证者&#xff0c…

高效分割分段视频:提升您的视频剪辑能力

在数字媒体时代&#xff0c;视频剪辑已经成为一项重要的技能。无论是制作个人影片、广告还是其他类型的视频内容&#xff0c;掌握高效的视频剪辑技巧都是必不可少的。本文将介绍如何引用云炫AI智剪高效地分割和分段视频&#xff0c;以提升您的视频剪辑能力。以下是详细的操作步…

2023-11-01 LeetCode每日一题(参加会议的最多员工数)

2023-11-01每日一题 一、题目编号 2127. 参加会议的最多员工数二、题目链接 点击跳转到题目位置 三、题目描述 一个公司准备组织一场会议&#xff0c;邀请名单上有 n 位员工。公司准备了一张 圆形 的桌子&#xff0c;可以坐下 任意数目 的员工。 员工编号为 0 到 n - 1 。…

appium操控微信小程序的坑

appium操控微信小程序的坑 打不开启动页面driver的context只有NATIVE_APP小程序上元素找不到 我打算使用appium操控微信小程序&#xff0c;只要能够获取到小程序的页面元素就算成功。下面都是我遇到的问题。 打不开启动页面 以下是我的appium的配置参数和代码&#xff1a; de…

基于Taro + React 实现微信小程序半圆滑块组件、半圆进度条、弧形进度条、半圆滑行轨道(附源码)

效果&#xff1a; 功能点&#xff1a; 1、四个档位 2、可点击加减切换档位 3、可以点击区域切换档位 4、可以滑动切换档位 目的&#xff1a; 给大家提供一些实现思路&#xff0c;找了一圈&#xff0c;一些文章基本不能直接用&#xff0c;错漏百出&#xff0c;代码还藏着掖…

Kubernetes - Ingress HTTP 升级 HTTPS 配置解决方案(新版本v1.21+)

之前我们讲解过 Kubernetes - Ingress HTTP 搭建解决方案&#xff0c;并分别提供了旧版本和新版本。如果连 HTTP 都没搞明白的可以先去过一下这两篇 Kubernetes - Ingress HTTP 负载搭建部署解决方案_放羊的牧码的博客-CSDN博客Kubernetes - Ingress HTTP 负载搭建部署解决方案…