动态规划|【路径问题】63.不同路径II

目录

题目

题目解析

动态规划思路

1.状态表示

2.状态转移方程 

3.初始化

4.填表顺序

5.返回值

代码


题目

63. 不同路径 II

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

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

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

示例 1:

输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2
解释:3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右

示例 2:

输入:obstacleGrid = [[0,1],[0,0]]
输出:1

提示:

  • m == obstacleGrid.length
  • n == obstacleGrid[i].length
  • 1 <= m, n <= 100
  • obstacleGrid[i][j] 为 0 或 1

题目解析

        跟上一篇博客62.不同路径有相似之处,机器人从strat位置走到finish位置,机器人只能向 下走或者向右走,现在多了一个条件就是这个m*n的网格中有障碍物,题目中说障碍物用1表示,然后求strat到达finish的 不同路径有多少。

        以上图为例,我们来分析,机器人刚开始再 【0,0】位置它可以向下或者向右走,我们先让机器人向下走达到【1,0】位置,【1,0】位置向右走是障碍物,向下走是空地,所以机器人,不能向右走,只能向下走到达【2,0】位置,【2,0】位置是边界,只能向右走到达【2,1】,【2,1】也是边界,只能向右走到达终点【2,2】

因此,这条路径是【0,0】-【1,0】-【2,0】-【2,1】-【2,2】

        当机器人第一步向右走,路径就是,【0,0】-【0,1】-【0,2】-【1,2】-【2,2】

动态规划思路

1.状态表示

首先还是得确定一个状态表示(以【i,j】位置为起点,或者以【i,j】为结尾)我们还是和上一篇一样,我们以【i,j】位置为结尾,我们要求起点到终点的路径方式

所以dp[i][j]表示起点到【i,j】位置的路径方式

2.状态转移方程 

因为这道题相当于之前的题,多了一个障碍物,所以我们先分析障碍物

当【i,j】位置是障碍物的时候,从上面,或者从左边都是不能到这里的所以dp[i][j]=0

当【i,j】位置不是障碍物的时候,分析方法跟上一篇博客62.不同路径是一样的,所以状态转移方程就是dp[i][j]=dp[i-1][j]+dp[i][j-1]

注意,有些人可能会问当【i,j】旁边的位置是障碍物时,这个状态转移方程还能用吗?答案是肯定的

例如上面这个图,【i,j】位置不是障碍物,所以dp[i][j]=dp[i-1][j]+dp[i][j-1],【i,j-1】的位置是障碍物,所以从起点到【i,j-1】的路径就是0条,也就是dp[i][j-1]=0;所以加不加都不影响。

3.初始化

        初始化的目的就是为了填表的时候不越界,我还是采用虚拟结点(多开一行,多开一列)的方法,,方法跟上一篇博客62.不同路径 ,所以我们让原本的第一个格子的左边或者上边的值为1,其他全为0就行。

4.填表顺序

填表顺序当然也是,从上到下,从左到右

5.返回值

        题目问的是,从起点到终点的路径,加了虚拟结点后,终点的下标【m,n】了,所以返回dp[m][n]。

代码

int uniquePathsWithObstacles(int** obstacleGrid, int obstacleGridSize, int* obstacleGridColSize)
{
    //创建dp表
    int dp[1000][1000]={0};
    //初始化
    dp[0][1]=1;
    int m=obstacleGridSize;
    int n=obstacleGridColSize[0];
    //填表
    for(int i=1;i<m+1;i++)
    {
        for(int j=1;j<n+1;j++)
        {
            //因为dp表多建了一行和一列,
            //例如每次会用地图中第一行,
            //第一列的值去填dp表中第二行第二列的值

            //第一行,第一列的值已经再初始化的时候填过了
           if(obstacleGrid[i-1][j-1]==1)dp[i][j]=0;
            else dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
    }
    return dp[m][n]; 
}

空间复杂度:O(mn)

时间复杂度:O(mn)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小狐狸chat2.7.2免授权修复版可用版

小狐狸chat2.7.2免授权修复版可用版 在网络上面找了好几个版本不能使用&#xff0c;今天发布这个仔细测试正常使用 主要功能&#xff1a;独立版无限多开支持分销会员充值自己APP打包小程序万能创作MJ绘图多个国内接口 国外很火的ChatGPT&#xff0c;这是一种基于人工智能技术…

SpringBoot整合rabbitmq-直连交换机队列(二)

说明&#xff1a;本文章主要是Direct定向/直连类型交换机的使用&#xff0c;它的大致流程是将一个队列绑定到一个直连交换机上&#xff0c;并赋予一个路由键 routingkey&#xff0c;当一个消息携带着路由值为routingkey&#xff0c;这个消息通过生产者发送给交换机时&#xff0…

Android进阶之路 - RecyclerView停止滑动后Item自动居中(SnapHelper辅助类)

之前一直没注意 SnapHelper 辅助类的功能&#xff0c;去年的时候看到项目中仅通过俩行代码设置 RecyclerView 后就提升了用户体验&#xff0c;觉得还是很有必要了解一下&#xff0c;尝试过后才发现其 PagerSnapHelper、LinearSnapHelper 子类可以作用于不同场景&#xff0c;且听…

操作系统—xv6内核环境配置

文章目录 xv6内核环境配置1.开发环境的准备(1).如果日常用Linux(2).Windows的回合#1.两个常见方法#2.wsl的一点安装细节#3.记得升级成wsl-2 (3).如果你是macOS#1.一些起因#2.最乐的一集#3.Homebrew的配置#4.mac用户的特权 2.先换apt源3.安装xv6的依赖4.克隆RISC-V GNU 编译器工…

ICLR/NeurIPS论文分享:任务通用的时序基础模型

吴海旭 清华大学软件学院博士生 师从龙明盛副教授&#xff0c;研究方向为深度学习及其在复杂时空物理过程建模中的应用&#xff0c;目前在Nature Machine Intelligence、IEEE TPAMI、ICML、NeurIPS上发表多篇论文&#xff0c;研究成果在中国气象局、北京冬奥会落地应用。曾获清…

【低代码开发_RuoYi_框架】RuoYi框架_前端页面部署/搭建

开源软件的影响力 随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点&#xff0c;使得越来越多的企业和个人选择使用开源软件&#xff0c;促进了软件行业的繁荣。然而&#xff0c;…

【Linux深入剖析】再续环境变量 | 进程地址空间

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.环境变量再续1.1 和…

visio、ppt、office等另存图片,如何设置更清晰

visio、ppt、office等另存图片&#xff0c;如何设置更清晰 选中要另存为的部分——文件——另存为——选好位置——格式选jpg——保存——按下图设置&#xff1a;质量100%&#xff0c;分辨率选打印机&#xff0c;大小选屏幕——确定

Linux:Kubernetes(k8s)——基础理论笔记(1)

我笔记来源的图片以及共享至GitHub&#xff0c;本章纯理论。这是k8s中部分的基础理论 &#x1f447; KALItarro/k8spdf: 这个里面只有一个pdf文件 (github.com)https://github.com/KALItarro/k8spdf&#x1f446; 什么是kubernetes kubernetes 是一个开源的&#xff0c;用于管…

COMPOSER安装使用WIN下升级PHP-V

想用TP6使用phpspreadsheet但是说我PHP版本低&#xff0c;原来是PHP7.0 composer要求至少7.4 直接修改环境变量&#xff0c;把PHP目录切换到7.4 composer升级比较简单&#xff0c;在PHP目录下CMD然后官网的命令执行下即可 下面就可以在TP根目录下执行命令安装PHPSPREADSHEET…

MyBatis 学习(二)之 第一个 MyBatis 案例

目录 1 配置 MyBatis 方式 1.1 XML 配置文件 1.2 Java 注解配置 1.3. Java API 配置 2 在 MySQL 中创建一张表 3 创建一个基于 Maven 的 JavaWeb 工程 4 编写 User 实体类 5 创建 Mybatis 全局配置文件 6 编写一个 DAO 或 Mapper 接口 7 编写 SQL 映射配置文件&#…

C++的继承和多态

继承和多态 继承继承的权限继承的子父类访问派生类的默认成员函数菱形继承&#xff08;C独有&#xff09;【了解】虚拟继承什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f;什么是菱形虚拟继承&#xff1f;如何解决数据冗余和二义性的继承和组合的区别&#xff1f;…

Vue3如何使用Pinia状态管理库与持久化

大家好&#xff0c;我是你们的好朋友咕噜铁蛋&#xff01;今天我将和大家分享如何在Vue3中使用Pinia状态管理库以及实现状态持久化的方法。作为一个Vue开发者&#xff0c;我们知道状态管理在大型应用程序中起着至关重要的作用。而Pinia作为Vue3推荐的状态管理库之一&#xff0c…

【论文笔记】Attention Is All You Need

【论文笔记】Attention Is All You Need 文章目录 【论文笔记】Attention Is All You NeedAbstract1 Introduction2 Background补充知识&#xff1a;软注意力 soft attention 和硬注意力 hard attention&#xff1f;补充知识&#xff1a;加法注意力机制和点乘注意力机制Extende…

HCIA-Datacom实验指导手册:6 构建基础 WLAN 网络

HCIA-Datacom实验指导手册&#xff1a;6 构建基础 WLAN 网络 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;1.掌握ap上线的配置方式和上线过程。ac配置验证 步骤 2 掌握隧道模式和旁挂模式下ac的配置。步骤 3 掌握查看ap…

android高级面试题2020,这套Github上40K+star面试笔记

前言 这里整理的是一些与技术没有直接关系的面试题&#xff0c;但是能够考察你的综合水平&#xff0c;所以不要以为不是技术问题&#xff0c;就不看&#xff0c;往往有时候就是这样一些细节的题目被忽视&#xff0c;而错过了一次次面试机会。 想要成为一名优秀的Android开发&…

生成服从伽马分布的随机样本np.random.gamma()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 生成服从伽马分布的随机样本 np.random.gamma() 选择题 关于以下代码输出的结果说法正确的是&#xff1f; import numpy as np import seaborn as sns a np.random.gamma(shape2,scale1.0,si…

WordPress通过宝塔面板的入门安装教程【保姆级】

WordPress安装教程【保姆级】【宝塔面板】 前言一&#xff1a;安装环境二&#xff1a;提前准备三&#xff1a;域名解析四&#xff1a;开始安装五&#xff1a;安装成功 前言 此教程适合新手&#xff0c;即使不懂代码&#xff0c;也可轻松安装wordpress 一&#xff1a;安装环…

时间管理大师速成(程序员版)

01 时间管理的重要性 管理时间有几个主要的原因&#xff1a; 时间和生活质量&#xff1a;时间是我们拥有的最宝贵的资源之一&#xff0c;管理好时间会直接影响我们的生活质量。高效的时间管理可以让我们开展日常活动&#xff0c;实现目标&#xff0c;并拥有休闲和休息的时间。 …

【虹科干货】以服务为中心的IT基础设施如何优化网络分析?

文章速览&#xff1a; 发现和识别故障实时数据分析数据包分析数据包快速捕获和解码 随着基础设施环境的快速变化和技术的不断进步&#xff0c;用户数量和IT基础设施流量迅速增加&#xff0c;服务故障的数量也相应增加。此时&#xff0c;服务中断不仅会带来直接的不便&#xf…