leetcode63 不同路径二

news2024/12/27 2:26:57

题目描述

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

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

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

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

起点
障碍物
终点

如上图表格,需要找出从起点到终点的不同路径。

解题思路

利用动态规划的思路,对于终点来说,只能从上边和左边到达,可以得到状态转移公式

dp[i][j] = dp[i-1][j] + dp[i][j-1] obstacleGrid(i,j) ==0

如果(i,j)位置上没有障碍物,则到达(i,j)位置的总路径就等于到达其左边(i,j-1)以及上方(i-1,j)的路径条数之和。

以4*4的格子说明,障碍物位置在(1,1)

1111
1炸弹012
1124
1248

需要注意的是,第一行和第一列的位置,如果没有障碍物存在的话,应该赋值为1,其他位置初始化0,状态转移过程如下

dp[i][j] = dp[i-1][j] + dp[i][j-1];

i = 1-4

j =1:4 

dp[1][1] = 0

dp[1][2] = 1 + 0 = 1

dp[1][3] = 1 + 1 = 2

dp[2][1] = 0 + 1 = 1

dp[2][2] = 1 + 1 = 2

dp[2][3] = 2 + 2 = 4

dp[3][1] = 1 + 1 = 2

dp[3][2] = 2 + 2 = 4

dp[3][3] = 4 + 4 = 8

最后输出到达最后一个位置的路径条数8

参考代码

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        
        int n = obstacleGrid[0].size();
        int m = obstacleGrid.size();
        int dp[m][n];
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                dp[i][j]=0;
        for (int i=0;i<m && obstacleGrid[i][0]==0;i++){
            dp[i][0] = 1;
        }
        for (int i =0;i<n && obstacleGrid[0][i]==0;i++){
            dp[0][i] = 1;
        }
        for (int i =1;i<m;i++){
            for (int j=1;j<n;j++){
                if (obstacleGrid[i][j]==0)
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
    }
};

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

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

相关文章

Elasticsearch7.3.2通俗易懂

文章目录一、安装1.步骤2.报错(1) can not run elasticsearch as root(2) could not find java in JAVA_HOME or bundled at ...(3) Error: Could not find or load main class XXX.JavaVersionChecker(4)BindTransportException[Failed to bind to [9300-9400]](5)max virtual…

如何在高压系统中实现电源和信号线的电气隔离

介绍 在一系列高压应用中存在电源和信号线的情况下&#xff0c;需要为设备和用户提供强大的保护&#xff0c;包括工厂自动化和电机驱动器等工业 4.0 系统。这延伸到汽车和电动汽车 &#xff08;EV&#xff09;、医疗系统、测试和测量应用以及光伏系统和电网基础设施等绿色能源…

ChatGPT API调用python和脚本实现

Chat GPT 由于其独特、近乎准确且类似人类的响应&#xff0c;如今在互联网上引起了过多的讨论。本文讨论如何通过 Python 代码连接到 Chat GPT API。 如果需要用website访问chatGPT&#xff0c; 请参考保姆级教程 火爆全球的网红OpenAI ChatGPT注册教程 文章目录第 1 步&#x…

随笔记——线程池

文章目录1 概览2 核心点2.1 使用线程池的好处2.2 如何创建线程池2.3 线程池的参数2.4 如何处理任务流程&#xff1f;2.5 如何关闭线程池2.6 拒绝策略2.7 线程池满了&#xff0c;会怎样&#xff1f;1 概览 2 核心点 2.1 使用线程池的好处 降低资源消耗&#xff1a;通过重复利用…

Servlet程序创建步骤

1. 创建项目 使用 IDEA 创建一个 Maven 项目. 1) 菜单 -> 文件 -> 新建项目 -> Maven 2. 引入依赖 Maven 项目创建完毕后, 会自动生成一个 pom.xml 文件. 我们需要在 pom.xml 中引入 Servlet API 依赖的 jar 包. 1) 在 中央仓库 中搜索 "servlet", 一般…

android 系统安全内容总结

部分android系统安全内容网上已经存在,这里的android系统安全内容还是以经验总结为主,夹带不少引用,并形成个人的理解。 android安全内容学习需要一定基础,没接触安全的开发可以认识一下,接触过安全的可以对比安全上的理解。组建android系统安全讨论群进行维护更新android…

基于ssm高校科研成果管理系统 java ideamysql

&#xff08;1&#xff09;教师功能需求 教师进入系统可以查看个人中心、科研成果初审管理、科研成果终审管理、科研发布管理、留言板管理等操作。 &#xff08;2&#xff09;管理员功能需求 管理员登陆后&#xff0c;主要功能模块包括个人中心、教师管理、学院管理员管理、科…

linux Redis 搭建

命令下载&#xff1a;wget https://download.redis.io/releases/redis-6.2.6.tar.gz安装gcc&#xff1a;yum -y install gcc automake autoconf libtool make;进入src下make编译&#xff1a;make;make MALLOClibc&#xff08;报错时执行&#xff09;make install新建文件夹相关…

【Meta EnCodec源码分析】BitPacker功能介绍

二进制流 首先介绍一下二进制流。 假如有下4个数值 [ 47, 19, 38, 53 ]首先每个数字对应的二进制分别如下 十进制数值二进制数值470x0010 1111190x0001 0011380x0010 0110530x0011 0101 我们需要将这些数字保存到一个二进制文件中。 注&#xff1a;这里不考虑BigEndian还…

Centos使用lanproxy,搭建一个属于自己的内网穿透服务器(附转发失败解决方法),小白向

目录 前言 准备工作 搭建与使用 1. 安装git工具 2. 安装java环境 3. 安装maven工具 4. 搭建Lanproxy 5. 启动内网穿透服务 6. 设置开机自启 转发失败解决方法 前言 最近白嫖了7个月阿里云的服务器&#xff0c;顺带研究了一下&#xff0c;发现有挺多有趣又好玩的东西…

Acwing---1096. 地牢大师

地牢大师1.题目2.基本思想3.代码实现1.题目 你现在被困在一个三维地牢中&#xff0c;需要找到最快脱离的出路&#xff01; 地牢由若干个单位立方体组成&#xff0c;其中部分不含岩石障碍可以直接通过&#xff0c;部分包含岩石障碍无法通过。 向北&#xff0c;向南&#xff0…

Redis基于docker跨服务器的一主两从三哨兵集群模式搭建

文章目录1 整体拓扑图2 redis与哨兵配置文件2.1 主节点配置文件2.1.1 主节点redis.conf配置文件2.1.2 主节点哨兵配置文件2.2 从节点配置文件2.1.1 从节点redis.conf配置文件2.1.2 从节点哨兵配置文件3 docke-compose编排文件4 启动并测试查看哨兵日志查看集群状态测试集群是否…

Spring源码分析 (Spring启动过程之容器对象的创建) (十五)

点进去 1.this() 2.注册配置类 3.refresh() Spring会将所有交由Spring管理的类&#xff0c;扫描其class文件&#xff0c;将其解析成BeanDefinition&#xff0c;在BeanDefinition中会描述类的信息&#xff0c;例如:这个类是否是单例的&#xff0c;Bean的类型&#xff0c;是否是懒…

导向滤波算法——OpenGL实现

导向滤波 一、介绍 导向滤波又称引导滤波&#xff0c;通过一张引导图片反映边缘、物体等信息&#xff0c;对输入图像进行滤波处理&#xff0c;使输出图像的内容由输入图像决定&#xff0c;但纹理与引导图片相似。 导向滤波的原理是局部线性模型&#xff0c;在保持双边滤波的优…

【学习笔记】多线程

1、线程基础 1.1 创建线程的几种方式 继承Thread 类&#xff0c;覆盖run方法实现Runable接口。实现run方法。然后 通过Thread类构造方法获取Thread对象。实现Callable接口。实现call方法。 call方法可以抛出异常。也可以有返回值。 run与start 调用run方法任然是主线程在执行。…

这个 Python 游戏库,打开就能玩一天

会 Python 的小伙伴&#xff0c;选择用 Python 让“大风车”吱呦呦地转&#xff01;还有的小伙伴&#xff0c;选择用 Turtle 库绘制童年的卡通人物 我们其实还可以选择用 Python 开发小游戏&#xff0c;回忆童年的美好时光。 “凹凸版”吃豆子 这次并非用pygame制作的&#…

MyBatis超详细学习笔记(黑马)

目录 一、MyBatis快速入门 &#xff08;一&#xff09;打开MyBatis中文官网 &#xff08;二&#xff09;在工程中&#xff08;pom.xml&#xff09;导入MyBatis依赖 &#xff08;三&#xff09;编写MyBatis核心配置文件——替换连接信息&#xff0c;解决硬编码问题 &#x…

关于加强网络舆情监测的几点建议,TOOM强化舆情监控有方法

网络舆情监测是一项旨在通过监测网络上的舆情信息&#xff0c;了解社会舆论和网络话语状况&#xff0c;分析舆情动态&#xff0c;预测舆情走向&#xff0c;并进行舆情管控的工作。主要通过计算机技术和信息科学手段对网络信息进行收集、整理、分析和报告&#xff0c;以便于管理…

Golang - 操作Redis

Golang - 操作Redis go-redis是Golang语言连接、操作Redis服务的客户端&#xff0c;几乎包含了对Redis的所有操作&#xff0c;具体如下&#xff1a; 简单易用 兼容多种Redis部署架构,可用于Redis服务器、Redis群集、Redis Sentinel&#xff0c;甚至Redis服务器环go-redis 支持…

配置TF-A源码

配置TF-A源码 1.对tf-a源码进行解压 $> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz 2.打补丁 进入/home/ubuntu/FSMP1A/tf-a-stm32mp-2.2.r2-r0/tf-a-stm32mp-2.2.r2目录 执行 for p in ls -1 ../*.patch; do patch -p1 < $p; done 3.配置工具链 1)进入/home/ubuntu/FS…