算法训练营第四十二天 | LeetCode 42 不同路径、LeetCode 63 不同路径 II

LeetCode 62 不同路径


  1. 这题首先确定下dp数组下标和含义。主要有两种方式,一种是按照位置在数组中下标直接确定,另一种是依据递推时边上的位置需要再往上和往左递推时会出界,将位置设为序号而非下标。这一题第二种方式会比较好一些。
  2. 递推逻辑也是依据当前问题和子问题之间关系确定,题目中给定的是当前问题和上一个位置往下走一步以及左边一个位置往右走一步这两个子问题之间存在递推关系。递推顺序依据递推逻辑来确定的话也就是从左往右和从上往下两重遍历,这里我们将纵向下标设置为从上往下为增长方向,这也和内存中实际存储方式比较相像。
  3. 最后还要依据实际递推过程确定初始化方式,这里可以用实际例子辅助思考,比如起始位置到右边第一个格子的路径明显是1,由上述逻辑可以看出这里只有起始位置对应dp数组取值是1时才能满足条件。所以dp[1][1]要初始化为1

代码如下:

class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[n + 1][m + 1];for (int i = 0; i <= n; i++) dp[i][0] = 0;for (int i = 0; i <= m; i++) dp[0][i] = 0;dp[1][1] = 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (i == 1 && j == 1) continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[n][m];}
}

LeetCode 63 不同路径II


这题其实和上一题差不多,关键在于对于障碍物之后路径递推逻辑的处理。由于我们定下的dp数组含义是到该位置序号处的路径数,所以直接遇到障碍物就将该到该位置路径设为0即可。当然我们也可以在递推过程中用if语句来判断,但这会让dp数组的含义变得混乱。所以不建议使用这种方法。

代码如下:

class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int[][] dp = new int[obstacleGrid.length + 1][obstacleGrid[0].length + 1];for (int i = 0; i <= obstacleGrid.length; i++) dp[i][0] = 0;for (int i = 0; i <= obstacleGrid[0].length; i++) dp[0][i] = 0;dp[1][1] = (obstacleGrid[0][0] > 0 ? 0 : 1);System.out.println(dp[1][1]);for (int i = 1; i <= obstacleGrid.length; i++) {for (int j = 1; j <= obstacleGrid[0].length; j++) {if (i == 1 && j == 1) continue;dp[i][j] = (obstacleGrid[i - 1][j - 1] > 0 ? 0 : (dp[i][j - 1] + dp[i - 1][j]));System.out.print(dp[i][j] + " ");}System.out.println();}return dp[obstacleGrid.length][obstacleGrid[0].length];}
}

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

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

相关文章

Android和flutter交互,maven库的形式导入aar包

记录遇到的问题&#xff0c;在网上找了很多资料&#xff0c;都是太泛泛了&#xff0c;使用后&#xff0c;还不能生效&#xff0c;缺少详细的说明&#xff0c;或者关键代码缺失&#xff0c;我遇到的问题用红色的标注了 导入aar包有两种模式 1.比较繁琐的&#xff0c;手动将aar…

The Sandbox DAO:投票决定元宇宙的未来!

赋予用户治理权&#xff0c;打造由社群运营的开放式数码国度 随着The Sandbox DAO的启动&#xff0c;我们邀请全球社群——这个新数字国度的公民们——提出建议并参与治理&#xff0c;共同塑造开放元宇宙的未来。 介绍 在The Sandbox&#xff0c;我们正在建立一个开放的元宇宙…

聚酯输送带的原材料

揭秘聚酯输送带原材料&#xff1a;高效耐用背后的秘密武器 在现代化工业生产中&#xff0c;聚酯输送带以其出色的耐用性和稳定性&#xff0c;成为众多行业不可或缺的传输工具。然而&#xff0c;你是否好奇&#xff0c;究竟是什么原材料赋予了聚酯输送带如此卓越的性能&#xf…

opencv c++编程基础

1、图片的本质 图像在 OpenCV 中的本质 在 OpenCV 中&#xff0c;图像被表示为一个多维数组&#xff0c;其中每个元素对应于图像中的单个像素。图像的维度取决于其通道数和像素数。 **通道数&#xff1a;**图像可以有多个通道&#xff0c;每个通道存储图像的不同信息。例如&…

一维扫描线,有多少对相交线段

D - Intersecting Intervals 目录 正向&#xff1a; 反向&#xff1a; 正向&#xff1a; 从左往右扫描&#xff0c;记录当前边数。 来了新边&#xff0c;它此刻与当前边数相交&#xff0c;加到总数中。边结束&#xff0c;当前边数中减去即可。 const int maxn 5e55; int …

Uniapp横竖屏切换让某一个页面只能横屏或者竖屏

先看官方属性 plus.screen.lockOrientation(default); // 默认横竖屏切换 plus.screen.lockOrientation(portrait-primary);// 竖屏展示 plus.screen.lockOrientation(landscape-primary); // 强制横屏简单需求&#xff1a;允许横竖屏切换 在 page.json增加以下代码 "gl…

李廉洋:5.22黄金原油高位震荡,今日最新行情分析策略。

黄金消息面分析&#xff1a;根据4月份的通胀数据&#xff0c;加拿大央行6月5日降息应该是“理所当然的”。加拿大的整体通货膨胀率在4月份降至2.7%&#xff0c;为自2021年初以来的最低水平&#xff0c;核心CPI中加拿大央行的两项首选数据均降至3%以下。加拿大央行在决定降息之前…

鸿蒙学习第一课--认识目录结构

项目结构介绍 module.json5 src > main > module.json5&#xff1a;Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明&#xff0c;详见module.json5配置文件。 资源分类和访问 关于s…

vue使用asiox 下载后端返回的excel数据流

一、前端代码 <template><div class"hello"><h1>{{ msg }}</h1><button style"color: brown" click"exportExcel">excel导出</button></div> </template><script> import axios from &q…

awk编辑器

目录 工作原理 命令格式 普通格式 BEGIN格式 语句循环格式 awk常见的内建变量&#xff08;可直接用&#xff09; 按行打印行内容 统计行数量 按字段输出文本 通过管道、双引号调用 Shell 命令 awk编辑器是一种流编辑器 工作原理 逐行读取文本,默认以空格或tab键为分…

二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++

二叉树基类声明 template<typename T>class Tree{protected:Tree() default;virtual ~Tree() default;virtual const Tree& root()const 0;virtual Tree& root() 0;virtual const Tree& left()const 0;virtual const Tree& right()const 0;virtua…

java第十八课 —— 重载、可变参数

方法重载 基本介绍 java 中允许同一个类中&#xff0c;多个同名方法的存在&#xff0c;但要求形参列表不一致&#xff01; 比如&#xff1a;System.out.println(); out 是 PrintStream 类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 注意事项和使用细节 方法名&…

【Vue】Vue2中的Vuex

目录 Vuex介绍Vuex 中的核心概念 在vue2中使用Vuex安装 Vuex创建一个 Vuex Store在 Vue 实例中使用 Vuex编写 Vuex 的 state、mutations 和 actions在组件中使用 Vuex Vuex的核心State组件中获取 Vuex 的状态mapState 辅助函数对象展开运算符 Getter基本使用示例 通过属性访问通…

从多站点到多活,XEOS 对象数据容灾能力再提升

近日&#xff0c; XSKY SDS V6.4 新版本发布&#xff0c;其中 XEOS V6.4 全新升级并完善了统一命名空间功能&#xff0c;更进一步增强和完善了异地容灾方案&#xff0c;配合强一致代理读&#xff0c;可以实现异地多活&#xff1b;同时大幅降低管理复杂度&#xff0c;有效降低容…

Nginx中的limit_req模块和limit_conn模块详解

引言 在高流量场景下&#xff0c;良好的限流和连接控制策略至关重要&#xff0c;以防止服务器过载&#xff0c;确保服务稳定性和高可用性。Nginx 提供了 limit_req 和 limit_conn 模块&#xff0c;用以实现请求频率和并发连接数的限制。本文将详细介绍这两个模块的生效阶段和生…

TikTok电商带货特训营,跟随时代潮流,跨境掘金(8节课)

课程内容&#xff1a; 1-先导课 2-一、店铺运营认知与思路 3-二、店铺风控注意事项 4-三、美区Tiktok前期工作-1店铺入驻模式 5-三、美区Tiktok前期工作-2指纹浏览器介绍 6-三、美区Tiktok前期工作-4绑定电话号码 7-三、美区Tiktok前期工作-5添加仓库地址 8-三、美区Ti…

GIS读研与求职准备:植被定量遥感专业研0

本文介绍植被定量遥感专业研究生入学初期&#xff0c;为将来从事开发类工作所作求职准备的规划路径、方向选择等方面的建议。 前面提到了&#xff0c;最近有很多师弟师妹询问关于研究生方向选择、求职准备等方面的问题。因为很多朋友的提问比较有共性&#xff0c;所以会在征得对…

【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖

【秒杀系统】从零开始打造简易秒杀系统&#xff08;一&#xff09;&#xff1a;防止超卖 前言 大家好&#xff0c;好久不发文章了。&#xff08;快一个月了- -&#xff09;最近有很多学习的新知识想和大家分享&#xff0c;但无奈最近项目蛮忙的&#xff0c;很多文章写了一半搁…

redis笔记1

1-nosql&#xff08;非关系型数据库&#xff09; 定位缓存&#xff0c;提高数据读写速度&#xff0c;减轻对数据储存与访问压力&#xff0c;不建议存敏感数据&#xff08;重要数据&#xff09;。 2-特征 &#xff08;1&#xff09;键值&#xff08;key-value&#xff09;型 &a…

【面试】Oracle JDK和Open JDK什么关系?

目录 1. 起源与发展2. 代码与许可3. 功能与组件4. 使用场景5. 版本更新与支持 1. 起源与发展 1.Oracle JDK是由Oracle公司基于Open JDK源代码开发的商业版本。2.Open JDK是java语言的一个开源实现。 2. 代码与许可 1.Oracle JDK包含了闭源组件&#xff0c;并根据二进制代码许…