Leetcode 63 不同路径 II

题意理解

        一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

        要求:机器人只能往下走和往右走

        目的:从起始位置走到终点位置

        特别的:地图中有障碍物,机器人遇到障碍物是过不去的,其可实现的路径就会减少一些。

        30034a4f2e684e4fb1c17c1bc563a337.png

                

解题思路

        和没有障碍物的路径记录差不多,唯一的不同之处在于障碍物使可到达的路径减少了。

        其次还有就是若dp[i,0]或dp[0,j]遇到障碍物时,之后的格子均是不可达的,因为机器人不能往左走或往右走~

        采用动态规划来解题

        1.确定dp[i,j]表示起始位置到(i,j)有多少条路径。

        2.当格子上有障碍物时,dp[i,j]=0

            到达格子(i,j)要么从上面下来,要么从左边过去

             则有dp[i,j]=dp[i,0]+dp[0,j]   (递推公式)

        3.初始化:

                dp[i,0] dp[0,j]赋值为1,若遇到障碍物,则之后的格子不可达,赋值为0

        4.根据题意,机器人只能从上往下,或从左往右

        5.打印dp数组,用于debug,检查其是否符合预期。

1.动态规划解题

 public int uniquePathsWithObstacles(int[][] v) {int m=v.length,n=v[0].length;//定义存储int[][] dp=new int[m][n];//初始化-处理障碍1for(int i=0;i<m&&v[i][0]!=1;i++) dp[i][0]=1;for(int j=0;j<n&&v[0][j]!=1;j++) dp[0][j]=1;//遍历for(int i=1;i<m;i++){for(int j=1;j<n;j++){//当前节点有障碍if(v[i][j]==1) dp[i][j]=0;else{dp[i][j]=dp[i-1][j]+dp[i][j-1];}}}return dp[m-1][n-1];}

2.分析

时间复杂度:O(m×n) 遍历格子

空间复杂度:O(m×n) 存储动态数组dp

 

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

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

相关文章

计算机基础面试题 |03.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

五、Spring AOP面向切面编程(基于注解方式实现和细节)

本章概要 Spring AOP底层技术组成初步实现获取通知细节信息切点表达式语法重用&#xff08;提取&#xff09;切点表达式环绕通知切面优先级设置CGLib动态代理生效注解实现小结 5.5.1 Spring AOP 底层技术组成 动态代理&#xff08;InvocationHandler&#xff09;&#xff1a;…

TTS | NaturalSpeech语音合成论文详解及项目实现【正在更新中】

----------------------------------&#x1f50a; 语音合成 相关系列直达 &#x1f50a; ------------------------------------- ✨NaturalSpeech&#xff1a;正在更新中~ ✨NaturalSpeech2&#xff1a;TTS | NaturalSpeech2语音合成论文详解及项目实现 本文主要是 讲解了Nat…

DrGraph原理示教 - OpenCV 4 功能 - 二值化

二值化&#xff0c;也就是处理结果为0或1&#xff0c;当然是针对图像的各像素而言的 1或0&#xff0c;对应于有无&#xff0c;也就是留下有用的&#xff0c;删除无用的&#xff0c;有用的部分&#xff0c;就是关心的部分 在图像处理中&#xff0c;也不仅仅只是1或0&#xff0c;…

ES6语法(五)封装模块化公共工具函数、引入npm包 ,并上传到npm中进行下载

1. 模块化 模块化是指将一个大的程序文件&#xff0c;拆分为许多小的文件&#xff08;模块&#xff09;&#xff0c;然后将小的文件组合起来。 1.1. 优点 &#xff08;1&#xff09;防止命名冲突 &#xff08;2&#xff09;代码复用 &#xff08;3&#xff09;高维护性 &…

【快速全面掌握 WAMPServer】06.整明白 PHP

网管小贾 / sysadm.cc 我们今天就要来学习了解一下作为 LAMP 四剑客之一的 PHP 。 PHP 是 Hypertext Preprocessor 即“超文本预处理器”的缩写&#xff0c;是在服务端执行的一种脚本程序语言。 通常它被用于 Web 开发&#xff0c;并可以嵌入 HTML 中&#xff0c;是具有交互功…

yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)

YOLOv5模型介绍 YOLOv5是目前最先进的目标检测算法之一&#xff0c;在多个数据集上取得了优秀的表现。相较于YOLOv4&#xff0c;YOLOv5采用了更深的Backbone网络和更高的分辨率输入图像&#xff0c;以提高检测精度和速度。 1.单目测距实现方法 在目标检测的基础上&#xff…

大模型入门0: 基础知识

transformerscaling law分布式训练 自然语言处理包括几大任务 NLP: 文本分类&#xff0c;词性标注&#xff0c;信息检索NLG&#xff1a;机器翻译&#xff0c;自动摘要&#xff0c;问答QA、对话机器ChatBot下游任务: 词性标注&#xff08;POS&#xff09;&#xff0c;句法分析…

全面分析解决mfc110u.dll丢失的5种方法,简单三步即可搞定

在计算机使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中“找不到mfc110u.dll”是常见的一种。mfc110u.dll是Microsoft Foundation Class&#xff08;MFC&#xff09;库中的一个动态链接库文件&#xff0c;它提供了许多用于开发Windows应用程序的函数和类。…

leetcode LCR 170. 交易逆序对的总数(hard)【小林优质解法】

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {int[]help; //归并排序的辅助数组public int reversePairs(int[] record) {int lengthrecord.length;// help 数组的实例化写在递归外面&#xff…

Linux基础知识点(六-共享内存)

一、共享内存基本概念 什么是共享内存&#xff1f;顾名思义&#xff0c;共享内存就是将内存进行共享&#xff0c;它允许多个不相关的进程访问同一个逻辑内存&#xff0c; 直接将一块裸露的内存放在需要数据传输的进程面前&#xff0c;让它们自己使用。因此&#xff0c;共享内存…

PostgreSQL表全解

文章目录 一、 约束1、 主键2、 非空3、唯一4、检查5、外键6、默认值 二、触发器1、构建表信息&#xff0c;填充数据2、触发器函数3、触发器 三、 表空间四、 视图五、索引1、 索引的基本概念2、索引的分类3、创建索引 六、 物化视图 一、 约束 1、 主键 primary key -- 主键…