Leetcode刷题详解——不同路径 II

news2024/9/23 5:17:42

1. 题目链接:63. 不同路径 II

2. 题目描述:

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

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

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

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

示例 1:

img

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

示例 2:

img

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

提示:

  • m == obstacleGrid.length
  • n == obstacleGrid[i].length
  • 1 <= m, n <= 100
  • obstacleGrid[i][j]01

3. 解法(动态规划):

3.1 算法思路:

3.1.1 状态表示:

dp[i][j]表示:走到[i,j]位置处,一共有多少种方式

3.1.2 状态转移:

如果dp[i][j]表示到达[i,j]位置的方法数,那么到达[i,j]位置之前的一小步,有两种情况:

  1. [i,j]位置的上方([i-1,j]的位置)向下走一步,转移到[i,j]位置
  2. [i,j]位置的左方([i,j-1]的位置)向右走一步,转移到[i,j]位置
  3. 如果这个位置有障碍物,直接等于0

3.1.3 初始化:

添加辅助结点。

添加辅助结点需要注意:

  1. 辅助结点里面的值要保证后续填表是正确的
  2. 下标的映射关系

在本题中,添加一行,添加一列后,只需将dp[1][0]或者dp[0][1]的位置初始化为1即可

请添加图片描述

3.1.4 填表顺序:

根据状态转移的推导,填表的顺序就是从上往下填每一行,每一行从左往右

3.1.5 返回值:

根据状态表示,我们要返回的结果是dp[m][n]

3.2 C++算法代码:

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m=obstacleGrid.size(),n=obstacleGrid[0].size();
        //创建一个dp表
        vector<vector<int>> dp(m+1,vector<int>(n+1));
        //初始化
        dp[1][0]=1;
        //填表
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(obstacleGrid[i-1][j-1]==0)
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[m][n];
        //返回结果
    }
};

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

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

相关文章

企业链表(未完成)

文章目录 1. 插入2. 代码实现 1. 插入 // 插入 void insert(LinkList* list, int pos, LinkNode* data) {if (!list || !data)return;if (pos < 0 || pos > list->size)return;LinkNode* curNode &(list->head);for (int i 0; i < pos; i) {curNode curN…

jenkins工具系列 —— 删除Jenkins JOB后清理workspace

文章目录 问题现象分析解决思路脚本实现问题现象分析 Jenkins使用过程中,占用空间最大的两个位置: 1 、workspace: 工作空间,可以随便删除,删除后再次构建时间可能会比较长,因为要重新获取一些资源。 2 、job: 存放的是项目的配置、构建结果、日志等。不建议手动删除,…

任正非说:浑水摸鱼,只有强者才能摸到鱼。

嗨&#xff0c;你好&#xff01;这是华研荟【任正非说】系列的第24篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、只强调精细化管理&#xff0c;公司是会萎缩的&#xff0c;精细化管理的目的&#xff0c;是为了扩张不陷入混…

最新版上门服务小程序源码 同城技师上门服务系统源码

最新版上门服务小程序源码 同城技师上门服务系统源码 需要了解的请看文末 系统介绍&#xff1a; 1、数据概况&#xff08;新增业务城市用户投票功能&#xff0c;更加直观的查看业务城市的关注度、人气和影响力,促进业务开展&#xff09; 2、数据概况 &#xff08;增加可视化…

【Linux命令】Linux常见命令介绍(最强超详细版本)

Linux常见命令 1. Linux 常用命令1.1 用户配置 2.目录及文件操作3. 文件查看及处理命令3. 其他命令 1. Linux 常用命令 1.1 用户配置 Linux 下有两种用户&#xff1a;超级用户&#xff08; root&#xff09; &#xff09; 、普通用户。 a) 超级用户&#xff1a;可以再 linux …

Linux开发者的利器:深入了解环境开发工具之yum篇

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a;在博主的博客中&#xff0c;Linux系统我们已经将关键指令、权限等等全部了解完了。接下来我们应该学习什么呢&#xff1f;当我们拿起一个手机或电脑&#xff0c;我们最先想到的就是下载QQ、…

什么是Webpack?它的主要功能是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

内网渗透-域信息收集

域环境 虚拟机应用&#xff1a;vmware17 域控主机&#xff1a;win2008 2r 域成员主机&#xff1a;win2008 2r win7 一.域用户和本地用户区别 使用本地用户安装程序时&#xff0c;可以直接安装 使用域用户安装程序时&#xff0c;需要输入域控管理员的账号密码才能安装。总结…

【Proteus仿真】【STM32单片机】便携式恒温箱设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用报警模块、LCD1602显示模块、DS18B20温度模块、加热制冷模块、按键模块、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1…

最新Ai智能创作系统源码V3.0,AI绘画系统/支持GPT联网提问/支持Prompt应用+搭建部署教程

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

HDRI贴图下载及Three.js利用

最令人兴奋的项目之一是在 Three js 中添加HDRI背景。 HDRI图像是从房间内部或花园、丛林或山脉等开放环境等场景中以 360 度捕获的。 你可以自己创建任何这些图像&#xff0c;但这不是本教程的主题。 相反&#xff0c;我们将从网站获取这些图像之一&#xff0c;并使用轨道控件…

(免费领源码)小程序+spring boot+mysql疫起买菜平台99212-计算机毕业设计项目选题推荐

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;疫起买菜平台小程序被用户普遍使用&#xff0c;为方便用户…

Transformer.js简明教程【Web AI】

Transformers.js 可在你的 Web 浏览器中实现最先进的机器学习&#xff0c;无需服务器。 它提供预训练模型和熟悉的 API&#xff0c;支持自然语言处理、计算机视觉、音频和多模态领域的任务。 借助 Transformers.js&#xff0c;开发人员可以直接在浏览器中运行文本分类、图像分类…

一文详解Docker与虚拟机的不同

Docker概述 Docker 是基于 Linux 内核的 cgroup&#xff0c;namespace&#xff0c;以及 AUFS 类的 Union FS 等技术&#xff0c;对进程进行封装隔离&#xff0c;属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程&#xff0c;因此也称其为容器。最初…

SurfaceFliger与Vsync信号如何建立链接?

Vsync信号上报流程 Vsync的注册函数&#xff0c;来临时会回调HWComposer的hook_VSYNC方法&#xff0c;接着调用到vsync方法中 大致流程梳理&#xff1a; 该方法会通知给SurfaceFliger的onVsyncReceived方法&#xff0c;接着调用DispSync的addResyncSample方法。 DispSyncThr…

Vue.js中的双向数据绑定(two-way data binding)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

如何在外SSH远程连接Ubuntu系统【无公网IP】

如何在外SSH远程连接Ubuntu系统【无公网IP】 文章目录 如何在外SSH远程连接Ubuntu系统【无公网IP】前言1. 在Ubuntu系统下安装cpolar软件2. 完成安装后打开cpolar客户端web—UI界面3. 创建隧道取得连接Ubuntu系统公网地址4. 打开Windows的命令界面并输入命令 前言 随着科技和经…

Java访问直接内存

一、背景 上一篇文章 类目体系设计总结&#xff0c;讲了Forest缓存数据是放在直接内存的&#xff0c;今天我们就来了解一下Java的直接内存是个啥玩意&#xff0c;它该怎么使用。 二、直接内存介绍 直接内存是在Java堆外的&#xff0c;直接向系统申请内存空间&#xff0c;它不…

哈希映射题·缺失的第一个正数

记录一道题解&#xff5e; 题目链接&#xff1a;缺失的第一个正数 解题思路&#xff1a; 理想情况下每个元素都在自己的位置上&#xff0c;如下&#xff1a; 现在将元素对应位置打乱&#xff0c;并且缺失了一个元素&#xff0c;如下&#xff1a; 题目就是要求我们找到这个缺失…

【论文阅读】End-to-End Spatio-Temporal Action Localisation with Video Transformers

文章目录 摘要和结论引言模型框架Vision EncoderTubelet Decoder(factorise Queries CA MHSA)Training objectiveMatching 摘要和结论 e2e&#xff0c;纯基于Transformer的模型&#xff0c;输入视频输出tubelets。无论是 对单个帧的稀疏边界框监督 还是 完整的小管注释。在这两…