LeetCode题解:63. 不同路径 II,动态规划,JavaScript,详细注释

2024-06-14 07:04

本文主要是介绍LeetCode题解:63. 不同路径 II,动态规划,JavaScript,详细注释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接:https://leetcode-cn.com/problems/unique-paths-ii/

解题思路:

  1. 在网格中的任意一点,都有向右和向下两种走法。同时它也是从上方和左方两个位置走过来的。
  2. 那么,任意一点的走法数量,等于从起点走到上方和左方点的数量之和。
  3. 第一行和第一列都只有一种走法,就是从起点一直走到底。
  4. 我们可以用一个二维数组,画出网格中每个点的走法数量,一直递推到终点,终点存储的就是所有的走法数量。
  5. 因此动态规划的状态转移方程为:dp[i][j]=dp[i-1][j]+dp[i][j-1]
  6. 如果遇到障碍物,则该位置的走法数量为0。
  7. 对于第一行和第一列来说,遇到障碍物之后,从障碍物起,之后的所有位置路径都为0。
/*** @param {number[][]} obstacleGrid* @return {number}*/
var uniquePathsWithObstacles = function(obstacleGrid) {const m = obstacleGrid.length // 缓存行数const n = obstacleGrid[0].length // 缓存列数// 如果起点和终点有障碍物,则没有路径,返回0if (obstacleGrid[0][0] || obstacleGrid[m - 1][n - 1]) {return 0}// 创建m行n列数组缓存结果let dp = Array.from({ length: m }, () => new Array(n).fill(0))let canGoDown = true // 用于判断第一列是否可以继续向下走let canGoRight = true // 用于判断第一行是否可以继续向下走// 初始化第一列,如果遇到障碍物,表示从障碍物开始,不可以继续往下走,路径都为0for (let i = 0; i < m; i++) {if (obstacleGrid[i][0]) {canGoDown = false}if (canGoDown) {dp[i][0] = 1}}// 初始化第一行,如果遇到障碍物,表示从障碍物开始,不可以继续往下走,路径都为0for (let i = 0; i < n; i++) {if (obstacleGrid[0][i]) {canGoRight = false}if (canGoRight) {dp[0][i] = 1}}// 从第二行第二列开始完成递推,遇到障碍物的位置,路径为0for (let i = 1; i < m; i++) {for (let j = 1; j < n; j++) {if (!obstacleGrid[i][j]) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1]}}}// 网格的最后一位为结果return dp[m - 1][n - 1]
};

这篇关于LeetCode题解:63. 不同路径 II,动态规划,JavaScript,详细注释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059704

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志