代码随想录 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

解题思路
本题和leetcode 62不同路径的区别在于网格中可能存在障碍物,方法仍然是动态规划,递推公式为dp[i][j]=dp[i-1][0]+dp[0][j-1],但能递推的条件是当前网格没有障碍物。本题初始化与leetcode 62差异最大,如果首尾节点存在障碍物,则无法达到终点,直接return 0. 第一行和第一列初始化时,也要判断当前位置是否存在障碍物,如果不存在,则初始化为1,否则默认为0.

代码实现

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();// If the starting position or the ending position is blocked, there are no possible pathsif (obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1) {return 0;}vector<vector<long long>> dp(m, vector<long long>(n, 0));// Initialize the first row and first columndp[0][0] = 1; // Starting positionfor (int i = 1; i < m; i++) {if (obstacleGrid[i][0] != 1) {dp[i][0] = dp[i-1][0];}}for (int j = 1; j < n; j++) {if (obstacleGrid[0][j] != 1) {dp[0][j] = dp[0][j-1];}}// Calculate the number of unique paths for each positionfor (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] != 1) {dp[i][j] = dp[i-1][j] + dp[i][j-1];}}}return dp[m-1][n-1];}
};

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

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

相关文章

UI界面程序鼠标右键弹出菜单的一些事

1.概述 在做客户端UI程序时&#xff0c;鼠标右键弹出菜单这种操作非常常见&#xff0c;一般在鼠标右键按下或者鼠标右键抬起事件中响应操作&#xff0c;显示菜单即可&#xff0c;但是有时涉及到鼠标的移动&#xff0c;就是鼠标按下右键且移动时&#xff0c;则不需要弹出菜单&a…

104. 二叉树的最大深度(Java)

目录 解法&#xff1a; 官方解答&#xff1a; 方法一&#xff1a;深度优先搜索 方法二&#xff1a;广度优先搜索 思路与算法 复杂度分析 时间复杂度&#xff1a; 空间复杂度&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根…

【密码学引论】数字签名

第八章 数字签名 1、数字签名体制包括两个方面&#xff1a;施加签名、验证签名 SIG(M,Kd)S VER(S,Ke)bool&#xff08;真、假&#xff09; 2、数字签名和信息加密的区别&#xff08;从密码学五个组成部分来回答 3、安全性要求&#xff1a;先签名后加密&#xff1b;针对哈希函…

如何入门网络安全_网络安全自学

由于我之前写了不少网络安全技术相关的故事文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人在微信里问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f;要学哪些东西&#xff1f;有哪些方向&#xff1f;怎么选&#xff…

算法:合并两个有序数组(双指针)

时间复杂度 O(m n)&#xff0c;空间复杂度 O(1) /*** param {number[]} nums1* param {number} m* param {number[]} nums2* param {number} n* return {void} Do not return anything, modify nums1 in-place instead.*/ var merge function(nums1,m,nums2,n) {let p1 m-1…

harmonyOS学习笔记之@Styles装饰器与@Extend装饰器

Styles装饰器 定义组件重用样式 自定义样式函数使用装饰器 可以定义在组件内或全局,内部优先级>外部,内部不需要function,外部需要function 定义在组件内的styles可以通过this访问组件内部的常量和状态变量,可以在styles里通过事件来改变状态变量 弊端:只支持通用属性和通用…

深度模型训练时CPU或GPU的使用model.to(device)

一、使用device控制使用CPU还是GPU device torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 单GPU或者CPU.先判断机器上是否存在GPU&#xff0c;没有则使用CPU训练 model model.to(device) data data.to(device)#或者在确定有GPU的…

解决 Cannot read properties of undefined (reading ‘getUserMedia‘) 报错

[TOC](解决 Cannot read properties of undefined (reading ‘getUserMedia’) 报错) 0. 背景 使用浏览器输入语音时&#xff0c;浏览器的控制台里面有下面错误信息。 Cannot read properties of undefined (reading getUserMedia)1. 解决方法 在浏览器中访问 chrome://fla…

半导体材料

半导体材料 电子元器件百科 文章目录 半导体材料前言一、半导体材料是什么二、半导体材料的类别三、半导体材料的应用实例四、半导体材料的作用原理总结前言 半导体材料具有独特的电学性质,使其在电子器件和集成电路中有广泛的应用。通过控制半导体材料中载流子的浓度和运动方…

数字化浪潮下,你的企业数字化转型了吗?

企业数字化转型面临的挑战 技术转型挑战&#xff1a;数字化转型涉及到各种新技术、新软件和新硬件&#xff0c;需要企业有一定的技术实力和专业知识&#xff0c;并且需要不断学习和适应变化。对于传统企业来说&#xff0c;可能面临技术门槛高、技术更新快等问题。组织结构转型…

如何用flex布局设计登录页?

使用 Flex 布局设计登录页是一种简单而灵活的方式&#xff0c;让页面在不同屏幕大小下都能有良好的布局。以下是一个简单的例子&#xff0c;演示如何使用 Flex 布局设计登录页&#xff1a; HTML 结构&#xff1a; <!DOCTYPE html> <html lang"en"> <…

从Android源码中生成系统签名文件

从Android源码中生成系统签名文件 文章目录 从Android源码中生成系统签名文件1、在linux中打开编译android源码目录。2、cd到签名文件位置3、生成 platform.pem文件4、生成 platform.p12 文件5、生成 最终的 platform.jks系统签名文件6、把platform.jks 放到Studio 项目app 根目…

word中,文本框如何跨页?

我们经常使用word编辑一些文档&#xff0c;文档中往往会有一些比较大的文本框&#xff0c;需要跨多页&#xff0c;我们可以使用本文章中的方法&#xff0c;将文本框连接在一起&#xff0c;是的内容自动跨页。 在文字中插入两个文本框如下图&#xff1a; 将内容放到第一个文本框…

ubuntu上搭建bazel编译环境,构建Android APP

背景是github上下载的工程&#xff0c;说明仅支持bazel编译&#xff0c;折腾了一天Android studio&#xff0c;失败。 不得不尝试单价bazel编译环境&#xff0c;并不复杂&#xff0c;过程记录如下 说明&#xff1a;ubuntu环境是20.04&#xff0c;pve虚拟机安装 1.安装jdk sudo…

Android audio环形缓冲队列

1、背景 在学习audio的过程中&#xff0c;看到了大神zyuanyun的博客&#xff0c;在博客的结尾&#xff0c;大神留下了这些问题&#xff1a; 但是大神没有出后续的博文来说明audio环形缓冲队列的具体实现&#xff0c;这勾起了我强烈的好奇心。经过一段时间的走读代码&#xff…

朴素贝叶斯 朴素贝叶斯原理

朴素贝叶斯 朴素贝叶斯原理 判别模型和生成模型 监督学习方法又分生成方法 (Generative approach) 和判别方法 (Discriminative approach)所学到的模型分别称为生成模型 (Generative Model) 和判别模型 (Discriminative Model)。 朴素贝叶斯原理 朴素贝叶斯法是典型的生成学习…

深度学习之全面了解网络架构

在这篇文章中&#xff0c;我们将和大家探讨“深度学习中的网络架构”这个主题&#xff0c;解释相关背景知识&#xff0c;并就一些问题进行解答。 我选择的问题反映的是常见用法&#xff0c;而不是学术用例。我将概括介绍该主题&#xff0c;然后探讨以下四个问题&#xff1a; …

Java的I/O演进之路

文章目录 通信技术整体解决的问题1 I/O 模型基本说明2 I/O模型Java BIOJava NIOJava AIO 3 BIO、NIO、AIO 适用场景分析 通信技术整体解决的问题 局域网内的通信要求。多系统间的底层消息传递机制。高并发下&#xff0c;大数据量的通信场景需要。游戏行业。无论是手游服务端&a…

区块链的可拓展性研究【04】分片

分片属于layer1扩容 区块链分片是一种技术实现&#xff0c;可以将区块链网络分成多个片段&#xff0c;每个片段负责处理一部分的交易数据。这种方法可以提高区块链网络的处理速度和吞吐量&#xff0c;降低交易确认时间和费用&#xff0c;同时也可以减轻节点运行负担。 在传统…

【出现模块node_modules里面包找不到】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 一、出现的问题二、解决办法三、其它可供参考 一、出现的问题 在本地运行 npm run docs:dev之后&#xff0c;出现 Error [ERR_MODULE_NOT_FOUND]: Cannot find package Z:\Blog\docs\node_modules\htmlparser2\ imported from Z:\Blo…