【Leetcode每日一题】 动态规划 - 不同路径(难度⭐⭐)(49)

news2024/11/27 18:35:22

1. 题目解析

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

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

这个问题就像是在一个迷宫中找路,只不过这个迷宫有些格子是不能走的,也就是那些“障碍物”。我们的任务是找出从起点到终点的所有可能路径。

想象一下,你站在一个格子上,你想知道到达这个格子有多少种走法。那你只需要看看你是从哪个格子走过来的。是不是只有两种可能:要么是从上面的格子走下来,要么是从左边的格子走过来?

但这里有个问题,如果上面的格子或左边的格子是障碍物,那你就不能从那里走过来。所以,我们得检查每个格子,看它上面和左边的格子是不是障碍物。

接下来,我们就来详细说说怎么计算这些走法:

  1. 状态表示
    dp[i][j]来表示到达第i行第j列的格子有多少种走法。

  2. 状态转移
    到达dp[i][j]这个格子,要么是从dp[i-1][j]这个格子走下来,要么是从dp[i][j-1]这个格子走过来。所以,走法的数量就是这两个格子走法数量的和。当然,如果这两个格子有障碍物,那它们的走法数量就是0。

  3. 初始化
    为了计算方便,我们通常在迷宫的外面多加一行和一列。这样,起点就变成了dp[1][1],并且dp[1][0]这个格子的走法数量就是1,因为我们只能从起点开始走。

  4. 填表顺序
    我们按照从上到下、从左到右的顺序来填这个表格。这样,当我们计算dp[i][j]的时候,dp[i-1][j]dp[i][j-1]都已经被计算过了。

  5. 返回值
    最后,我们要找的是从起点到终点的走法数量,也就是dp[m][n],其中mn分别是迷宫的行数和列数。

3.代码编写

class Solution 
{
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) 
    {
        int m = obstacleGrid.size(), n = obstacleGrid[0].size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));
        dp[0][1] = 1;
        for(int i = 1; i <= m; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(obstacleGrid[i - 1][j - 1] == 0)//减一是为了dp映射会ob,dp行列都加一了
                {
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        return dp[m][n];
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

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

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

相关文章

简单几步轻松实现电脑快速切换IP地址

在数字化时代&#xff0c;网络已经成为我们日常生活和工作中不可或缺的一部分。IP地址作为网络设备的标识符&#xff0c;扮演着至关重要的角色。然而&#xff0c;在某些特定场景下&#xff0c;我们可能需要快速切换IP地址&#xff0c;以满足不同的网络需求或保护个人隐私。虎观…

算法基础--递归

&#x1f600;前言 递归是一种重要的算法思想&#xff0c;常用于解决问题的分解与求解。在计算机科学中&#xff0c;递归是指一个函数在其定义中调用自身的情况。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 算法基础--递归递归入门例题递归实现指数型枚举递归实现排…

gulp的基本使用(一)

gulp的基本使用 开始全局安装gulp-cli本地项目初始化gulp插件的安装查看是否安装成功项目根目录创建gulpfile.js文件运行命令测试结果 开始 全局安装gulp-cli 命令 npm install --global gulp-cligulp-cli作用&#xff1a; gulp的命令行工具&#xff0c;它需要全局安装&…

华为交换机维护——管理接口

常见的设备管理方式有SNMP、Web、Telnet以及通过Console口管理等。从技术的角度分析&#xff0c;网络管理可分为带外管理和带内管理。所谓带内管理&#xff0c;是指网络中的管理数据和业务数据在相同的链路中传输。当管理数据的流量较少时&#xff0c;对整个网络的性能影响不明…

前后端开发之——文章分类管理

原文地址&#xff1a;前后端开发之——文章分类管理 - Pleasure的博客 下面是正文内容&#xff1a; 前言 上回书说到 文章管理系统之添加文章分类。就是通过点击“新建文章分类”按钮从而在服务端数据库中增加一个文章分类。 对于文章分类这个对象&#xff0c;增删改查属于配…

Windows提权—数据库提权-mysql提权mssql提权Oracle数据库提权

目录 Windows 提权—数据库提权一、mysql提权1.1 udf提权1.1.2 操作方法一 、MSF自动化--UDF提权--漏洞利用1.1.3 操作方法二、 手工导出sqlmap中的dll1.1.4 操作方法三、 moon.php大马利用 1.2 mof提权1.3 启动项提权1.4 反弹shell 二、MSSQL提权MSSQL提权方法1.使用xp_cmdshe…

项目管理工具的魔力:团队合作的秘诀大揭秘!

我们知道项目的成败往往取决于人。假如一个项目团队组织不善&#xff0c;即使项目经理能力很强也无法力挽狂澜&#xff0c;甚至被团队束缚。创建更好的项目团队可以从多方面下手其中项目管理工具就是重要的一项&#xff0c;如何利用项目管理工具组建更好的项目团队&#xff1f;…

中国主要河流水系数据

在我国&#xff0c;水系等级划分主要依据流域面积、流量和河流长度等因素。根据《中华人民共和国水资源》的相关规定&#xff0c;我国水系等级大致可以分为以下几类&#xff1a; 一级水系&#xff1a;主要是指国内的大型河流&#xff0c;如长江、黄河、珠江等。这些河流的流域…

java入门-分支与循环

分支结构 分支结构是解决程序选取分支走不同的路线&#xff0c;增加了程序开发的灵活性。java的分支主要由if和switch这两种结构实现。 if 语句 if是分支中最常用的语法&#xff0c;它从形式上有三种形态&#xff1a; if 结构 结构 语法 if(表达式){ //代码块 } 程序案例 i…

基于java+SpringBoot+Vue的学生考勤管理系统设计与实现

基于javaSpringBootVue的学生考勤管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 登录注册&#xff1a;支持学生、教师和管理员登录和注册。 个人中心&#xff1a;用户可以查看和更新个…

C语言-冒泡排序算法

题目描述 设计一个程序&#xff0c;实现冒泡排序算法&#xff0c;并输出{9,8,7,6,5,4,3,2,1,0} 的排序过程。 输出 每个排序过程输出一行&#xff0c;直到排序完成。 样例输出 Expected 9 8 7 6 5 4 3 2 1 0 0 9 8 7 6 5 4 3 2 1 0 1 9 …

C#学习笔记7:C#面向对象编程方法(1)

今日继续我的C#学习笔记 主要用实际代码编程来学习研究C#面向对象的编程方法&#xff1a;直接看代码及注释即可&#xff1a; 目录 1、对类与对象概念的快速认知&#xff1a; 2、类和对象成员访问控制&#xff1a; 3、类的构造函数和析构函数&#xff1a; 4、类的属性&#xff…

GaussDB云数据库极简版安装与使用-新手指南

一、前言 作为一款领先的企业级数据库管理系统&#xff0c;GaussDB 提供了强大的性能、高度可靠性和丰富的功能&#xff0c;是企业构建可靠、高性能的数据库解决方案的理想选择。 本文主要针对高校和个人测试环境&#xff0c;介绍极简版安装和使用过程&#xff0c;更加适合高…

git 修改历史 commit message

目录 1&#xff0c;修改当前的2&#xff0c;修改历史的1&#xff0c;先查看 log2&#xff0c;开始修改 3&#xff0c;其他注意点1&#xff0c;中途不想修改了2&#xff0c;commit ID 会发生变化3&#xff0c;推送远程4&#xff0c;精准定位 1&#xff0c;修改当前的 直接使用下…

Netty核心原理剖析与RPC实践11-15

Netty核心原理剖析与RPC实践11-15 11 另起炉灶&#xff1a;Netty 数据传输载体 ByteBuf 详解 在学习编解码章节的过程中&#xff0c;我们看到 Netty 大量使用了自己实现的 ByteBuf 工具类&#xff0c;ByteBuf 是 Netty 的数据容器&#xff0c;所有网络通信中字节流的传输都是…

哥哥张国荣逝世21年,唐唐继续发文怀念

一代巨星张国荣&#xff08;哥哥&#xff09;在21年前的愚人节&#xff08;2003年4月1日&#xff09;从香港文华东方酒店一跃而下&#xff0c;终年46岁&#xff0c;当年他的离开令很多歌迷影迷都感到悲痛&#xff0c;当中亦包括了他…… 他就是唐鹤德&#xff08;唐唐&#xff…

FPGA高端图像处理开发板-->鲲叔4EV:12G-SDI、4K HDMI2.0、MIPI等接口谁敢与我争锋?

目录 前言鲲叔4EV----高端FPGA图像处理开发板核心板描述底板描述配套例程源码描述配套服务描述开发板测试视频演示开发板获取 前言 在CSDN写博客传播FPGA开发经验已经一年多了&#xff0c;帮助了不少人&#xff0c;也得罪了不少人&#xff0c;有的人用我的代码赢得了某些比赛、…

SpringBoot整合Netty整合WebSocket-带参认证

文章目录 一. VectorNettyApplication启动类配置二.WebSocketServerBoot初始化服务端Netty三. WebsocketServerChannelInitializer初始化服务端Netty读写处理器四.initParamHandler处理器-去参websocket识别五.MessageHandler核心业务处理类-采用工厂策略模式5.1 策略上下文 六…

【C语言】联合和枚举

个人主页点这里~ 联合和枚举 一、联合体1、联合体类型的声明2、联合体成员的特点3、与结构体对比4、计算联合体大小 二、枚举1、枚举的声明2、枚举的优点3、枚举类型的使用 一、联合体 1、联合体类型的声明 联合体的定义与结构体相似&#xff0c;但是联合体往往会节省更多的空…

分布式光伏电力监控系统解决方案

安科瑞薛瑶瑶18701709087 分布式光伏现状 自发自用、余电上网模式 完全自发自用&#xff08;防逆流&#xff09;模式 全额上网模式 0.4kV并网系统 此图为车间新建屋顶分布式光伏发电项目&#xff0c;建设装机容量为1103.46kWp。组件采用单晶硅功率515Wp及550Wp组件&#xff…