leetcode 不同路径详解

news2024/11/24 14:13:32

文章目录

  • 62 . 不同路径
    • 题目详情
    • 动态规划之带备忘录实现
    • Java完整代码
  • 63. 不同路径 II
    • 题目详情
    • 动态规划之带备忘录实现
    • Java完整代码

62 . 不同路径

题目详情

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

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

问总共有多少条不同的路径?

在这里插入图片描述
示例 2:

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
向右 -> 向下 -> 向下
向下 -> 向下 -> 向右
向下 -> 向右 -> 向下

示例 3:
输入:m = 7, n = 3
输出:28

示例 4:
输入:m = 3, n = 3
输出:6

leetcode62

动态规划之带备忘录实现

动态规划五步走解题:动态规划理论基础

1、确定dp数组以及下标的含义
dp[i][j]的定义为:走到第i行j列位置的方法数

2、确定递推公式
机器人只能向下或者向右移动一步,因此对于第i行j列位置的方法数,应该是第i-1行j列的方法数加上第i行j-1列的方法数:
dp[i][j] = dp[i-1][j] + dp[i][j-1]

3、dp数组如何初始化
由题目可知,第0行一直向右移动,只有一种方法,因此dp[0][j] = 1;
第0列一直向下移动,只有一种方法,因此dp[i][0] = 1
即初始化为类似下表:

1111
1
1

4、确定遍历顺序
dp[i][j]是依赖 dp[i-1] [j] 和 dp[i][j-1],那么遍历的顺序一定是从前到后遍历的

5、举例推导dp数组
当m=3,n=7时推导表格如下:
在这里插入图片描述

Java完整代码

class Solution {
    public int uniquePaths(int m, int n) {
        int [][] dp = new int[m][n];

        // 初始化
        // 向右移动
        for (int i = 0; i < n; i++) {
            dp[0][i] = 1;
        }

        // 向下移动
        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }

        return dp[m-1][n-1];
    }
}

63. 不同路径 II

题目详情

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

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

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

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

leetcode 63

在这里插入图片描述

动态规划之带备忘录实现

本题实现的动态规划想法和上面一道是一模一样的,唯一值得注意的是,应该怎么去解决遇到障碍后的处理。

动态规划五步走解题:动态规划理论基础

1、确定dp数组以及下标的含义

dp[i][j]的定义为:走到第i行j列位置的方法数

2、确定递推公式
机器人只能向下或者向右移动一步,因此对于第i行j列位置的方法数,应该是第i-1行j列的方法数加上第i行j-1列的方法数:
dp[i][j] = dp[i-1][j] + dp[i][j-1]
如果第i行j列是障碍,则dp[i][j]=0

3、dp数组如何初始化
由题目可知,第0行一直向右移动,只有一种方法,因此dp[0][j] = 1;
第0列一直向下移动,只有一种方法,因此dp[i][0] = 1
遇到障碍和障碍之后的点都应该是0
即初始化为类似下表:

1100
1
0

4、确定遍历顺序
dp[i][j]是依赖 dp[i-1] [j] 和 dp[i][j-1],那么遍历的顺序一定是从前到后遍历的

5、举例推导dp数组
如图所示:
在这里插入图片描述
推导过程如下:
在这里插入图片描述

Java完整代码

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int raw = obstacleGrid.length;
        int lie = obstacleGrid[0].length;

        int [][] dp = new int[raw][lie];
        // 初始化

        // 向右移动
        for (int i = 0; i < lie; i++) {
            if (obstacleGrid[0][i] == 1) {
                // 第0行某处有障碍
                break;  // dp数组默认初始化为0
            }
            dp[0][i] = 1;
        }
        // 向下移动
        for (int i = 0; i < raw; i++) {
            if (obstacleGrid[i][0] == 1) {
                // 第0列某处有障碍
                break;  // dp数组默认初始化为0
            }
            dp[i][0] = 1;
        }

        for (int i = 1; i < raw; i++) {
            for (int j = 1; j < lie; j++) {
                if (obstacleGrid[i][j] == 1) {
                    // 该处有障碍
                    dp[i][j] = 0;
                } else {
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
                
            }
        }
        return dp[raw-1][lie-1];
    }
}

ps:计划每日更新一篇博客,今日2023-05-17,日更第三十一天。
昨日更新:

leetcode 746. 使用最小花费爬楼梯

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

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

相关文章

JavaSE进阶(二)—— 面向对象进阶(包、权限修饰符、抽象类、多态)

目录 一、包 1. 什么是包 2. 导包 二、权限修饰符 1. 什么是权限修饰符 2. 权限修饰符的分类和具体作用范围 3. 学完权限修饰符需要具备如下能力 三、final 1. final的作用 2. final修饰变量的注意 四、常量 1. 常量概述和基本作用 1.1 常量做信息配置的原理、优…

【操作系统】I/O管理

文章目录 I/O设备的基本概念和分类I/O设备的分类 I/O控制器I/O设备的组成I/O控制器的组成I/O控制器的两种寄存器编址方式 I/O控制方式程序直接控制方式中断驱动方式DMA方式通道控制方式 I/O软件的层次结构用户层软件设备独立性软件六大功能逻辑设备表—LUT 设备驱动程序中断处理…

免交互的使用

免交互的使用 一、免交互二、小实验三、利用脚本完成的小实验三、Expect 一、免交互 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如ftp、cat或者read命令。 免交互时标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来…

MySQL查询练习题

一&#xff0e;编程题 有三张表&#xff0c;结构如下&#xff1a; Student(学号StuId,姓名StuName,性别StuSex,出生年月StuBirth) Course(课程号CouId,课程名CouName,授课教师CoouTeacher) SC(学号StuId,课程号CouId,成绩Score,授课教师CouTeacher) 用标准SQL语句完成下列操作…

第六章 介绍Productions - 其他Production 选项

文章目录 第六章 介绍Productions - 其他Production 选项用户门户工作流业务活动监控Alerts发布和订阅消息传递Message Bank 第六章 介绍Productions - 其他Production 选项 本章概述了与制作相关的其他选项。 用户门户 与 Studio 和管理门户等后端工具不同&#xff0c;用户…

免交互 (Here Document)

目录 免交互 (Here Document) 语法格式&#xff1a; 注意事项&#xff1a; 支持变量替换 多行注释 Expect 基本命令: interact 嵌入执行模式 实现 ssh 自动登录 免交互 (Here Document) 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、c…

阿里云异构计算云服务器GPU、FPGA和EAIS详解

阿里云阿里云异构计算主要包括GPU云服务器、FPGA云服务器和弹性加速计算实例EAIS&#xff0c;随着人工智能技术的发展&#xff0c;越来越多的AI计算都采用异构计算来实现性能加速&#xff0c;阿里云异构计算云服务研发了云端AI加速器&#xff0c;通过统一的框架同时支持了Tenso…

量化数据运算

量化数据运算 文章目录 量化数据运算量化数据乘积仿射映射量化的矩阵运算矩阵表示 矩阵CAB量化方式表示 矩阵CAB 代码展示基于仿射映射量化的矩阵乘法矩阵乘法计算API通过仿射映射量化形式计算两个矩阵的乘法**欢迎关注公众号【三戒纪元】** 量化数据乘积 使用记号&#xff08…

【Java代码审计】XSS漏洞产生原理及其修复

XSS漏洞代码审计 前言XSS漏洞原理1、反射型XSS反射型XSS漏洞审计 2、存储型XSS存储型XSS审计 漏洞修复 前言 笔者已经很长时间没有写过笔记力&#xff0c;经过一年的摸爬滚打也算是走到了代码审计这一关&#xff0c;这些日子也还在为项目和hw周旋&#xff0c;上周终于面试完&a…

今年是很惨,但有人怒砍一大把Offer...

300万字&#xff01;全网最全大数据学习面试社区等你来&#xff01; 今天的主人公是一个应届生&#xff0c;同时也是我在训练营辅导的一名同学&#xff0c;在整体经济下行&#xff0c;互联网见顶的情况拿到包括腾讯、蚂蚁、B站等多家互联网大厂Offer。 下面是我站在求职者角度提…

DDL语句DQL语句

SQL学习笔记 DDL语句--操作数据表 /* 快捷键: insert键 在插入 和 替换模式之间切换 ctrl 字母z 撤销上一步操作 tab 往后缩进(默认4个空格) shift tab 往前缩进(默认4个空格) …

基于Java+SpringBoot+Vue学生信息管理设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

重磅发布:《AI产品经理的实操手册(2023版)》

今天是咱们社群“AI产品经理大本营”六周年活动的最后一天&#xff0c;正式发布这份大家和我都非常期待的重磅干货——《AI产品经理的实操手册&#xff08;2023版&#xff09;》 上周发布的“AI季度资料包&#xff08;2023Q2&#xff09;”&#xff0c;适合对AI初步感兴趣的产品…

《统计学习方法》——隐马尔可夫模型(中)

概率计算算法 直接计算法 给定模型 λ ( A , B , π ) \lambda(A,B,\pi) λ(A,B,π)和观测序列 O ( o 1 , o 2 , ⋯ , o T ) O(o_1,o_2,\cdots,o_T) O(o1​,o2​,⋯,oT​)&#xff0c;计算观测序列 O O O出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。最直接的方法就是…

『python爬虫』23. selenium之窗口切换与iframe(保姆级图文)

目录 1. 窗口切换2. 抓取拉勾网职务信息2.1 拉勾网查看职务详情与价格2.2 完整代码 3. iframe的处理总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 1. 窗口切换 窗口句柄的定义&#xff1a;WebDriver对象有wi…

肝一肝设计模式【八】-- 外观模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 肝一肝设计模式【五】-- 适配器模式 传送门 肝一肝设计模式【六】-- 装饰器模式 传送门 肝…

Windows本地快速搭建SFTP文件服务器,并端口映射实现公网远程访问

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

ChatGPT 和 Elasticsearch:使用 ChatGPT 处理 Elastic 数据的插件

作者&#xff1a;Baha Azarmi 你可能已经阅读过这篇关于我们将 Elasticsearch 的相关性功能与 OpenAI 问答功能相结合的博文。 该帖子的主要思想是说明如何将 Elastic 与 OpenAI 的 GPT 模型结合使用来构建响应并向用户返回上下文相关的内容。 我们构建的应用程序可以公开一个…

好久不见,甚是想念

大家好&#xff0c;我是程序员小哈。 一晃停更好久了&#xff0c;之前因为12月份阳了&#xff0c;身体一直感觉没有完全恢复&#xff0c;就一直偷懒了&#xff0c;外加单位的事情比较多&#xff0c;实在是分身乏术&#xff0c;最近总算是告一段落了&#xff0c;咱们的知识分享…

shell脚本——流编辑器“三剑客”之sed命令

shell脚本——流编辑器“三剑客”之sed命令 一、流编辑器“三剑客”二、sed编辑器1、sed的工作流程2、命令格式3、常用选项4、常用操作5、打印内容6、使用地址7、删除行8、替换9、插入 一、流编辑器“三剑客” sed awk grep 二、sed编辑器 sed是一种流编辑器&#xff0c;流编…