当前位置: 首页 > news >正文

【第38天】不同路径数问题 | 网格 dp 入门

本文已收录于专栏
🌸《Java入门一百例》🌸

学习指引

  • 序、专栏前言
  • 一、网格模型
  • 二、【例题1】
    • 1、题目描述
    • 2、解题思路
    • 3、模板代码
    • 4、代码解析
    • 5.原题链接
  • 三、【例题2】
    • 1、题目描述
    • 2、解题思路
    • 3、模板代码
    • 4、代码解析
    • 5.原题链接
  • 三、推荐专栏
  • 四、课后习题

序、专栏前言

   本专栏开启,目的在于帮助大家更好的掌握学习Java,特别是一些Java学习者难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
   但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
   算法的学习肯定不能缺少总结,这里我推荐大家可以到高校算法社区将学过的知识进行打卡,以此来进行巩固以及复习。
  学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。

一、网格模型

   网格模型是一个很经典的模型,也可以称之为数字三角形模型。其一般形态就是在一个二维的网格中,以左上角为起点,到右下角为终点,只能往下走或者往右走。求得这个过程中可以获取的不同路径数或者权值最大最小问题,当然如何移动也要根据题意来分析,在转移时亦是如此。今天将带来两道最入门的网格dp入门题。

二、【例题1】

1、题目描述

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

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

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

2、解题思路

   定义 f[i][j]f[i][j]f[i][j] 为走到 iiijjj 列的不同路径数,显然 iiijjj 列只能从i−1i-1i1jjj 列和iiij−1j-1j1 列走过来,那么具有转移方程:
f[i][j]=f[i−1][j]+f[i][j−1]f[i][j]=f[i-1][j]+f[i][j-1]f[i][j]=f[i1][j]+f[i][j1]
初始化时f[1][1]f[1][1]f[1][1]应该等于1,答案即是f[m][n]f[m][n]f[m][n]

3、模板代码

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

使用滚动数组优化:

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

4、代码解析

滚动数组优化,也是二维dp里常用的优化方式,可以帮忙我们压缩一维空间,不太理解暂时不建议深究。
为了防止边界越界问题,这里大家 iii jjj 都从1开始,如果从0的话在转移时会出现越界。

5.原题链接

不同路径

三、【例题2】

1、题目描述

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

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

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

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

2、解题思路

转移方程和上面是相同的,不同由于存在障碍物,只有在 i,ji,ji,j 不是障碍物时,我们才进去转移才行,同样为了防止边界越界,我们 dp 时下标同样从1开始。

3、模板代码

class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m=obstacleGrid.length;int n=obstacleGrid[0].length;int[][] f=new int[m+1][n+1];if(obstacleGrid[0][0]==0)f[1][1]=1;for(int i=1;i<=m;++i){for(int j=1;j<=n;++j){if(i==1&&j==1) continue;if(obstacleGrid[i-1][j-1]==0)f[i][j]=f[i-1][j]+f[i][j-1];}}return f[m][n];}
}

4、代码解析

注意起点有可能有石头,初始化时需要进行判断。

5.原题链接

不同路径||
在这里插入图片描述

三、推荐专栏

🌌《零基础学算法100天》🌌

四、课后习题

序号题目链接难度评级
1 最小路径和3
👇 学习有疑问?👇

相关文章:

【第38天】不同路径数问题 | 网格 dp 入门

本文已收录于专栏&#x1f338;《Java入门一百例》&#x1f338;学习指引序、专栏前言一、网格模型二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、【例题2】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、推荐专栏四、课后习题序、专…...

LINUX之链接命令

链接命令学习目标能够说出软链接的创建方式能够说出硬链接的创建方式1. 链接命令的介绍链接命令是创建链接文件&#xff0c;链接文件分为:软链接硬链接命令说明ln -s创建软链接ln创建硬链接2. 软链接类似于Windows下的快捷方式&#xff0c;当一个源文件的目录层级比较深&#x…...

1628_MIT 6.828 xv6_chapter0操作系统接口

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这本书最初看名字以为是对早期unix的一个解读&#xff0c;但是看了开篇发现 不完全是&#xff0c;只是针对JOS教学OS系统来做的一些讲解。 Xv6是对UNIX v6的重新实…...

使用 Sahi 实现 Web 自动化测试

Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具。Sahi 运行为一个代理服务器&#xff0c;并通过注入 JavaScript 来访问 Web 页面中的元素。Sahi 支持 HTTPS 并且独立于 Web 站点&#xff0c;简单小巧却功能强大。它相对于 Selenium 等自动化测试工具…...

天津菲图尼克科技携洁净及无菌防护服解决方案与您相约2023生物发酵展

BIO CHINA 生物发酵产业一年一度行业盛会&#xff0c;由中国生物发酵产业协会主办&#xff0c;上海信世展览服务有限公司承办&#xff0c;2023第10届国际生物发酵产品与技术装备展览会&#xff08;济南&#xff09;于2023年3月30-4月1日在山东国际会展中心&#xff08;济南市槐…...

Java 网络编程详解

1、什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;可以进行数据传输。 应用场景&#xff1a;     1、即时通信 2、网游对战 3、邮件等等 Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序 2、网络编程三要素 2.1 IP地址 要…...

Scratch少儿编程案例-几何形式贪吃蛇

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

一定要收藏的面试思维导图,粉丝分享面试经验

一位粉丝分享面试经验&#xff1a;1.常见面试题有哪些&#xff1f;主要从以下一些知识点做了准备&#xff1a; 常用的分析方法、Excel、SQL、 A/B测试、产品分析。然后每份面试针对职位要求&#xff0c;还有前期和HR聊天一点点了解这个职位之后&#xff0c;定向准备。 Excel、S…...

【博客615】通过systemd设置cgroup来限制服务资源争抢

通过systemd设置cgroup来限制服务资源争抢 1、场景 我们的宿主机上通常会用systemctl来管理一些agent服务&#xff0c;此时我们需要限制服务的cpu&#xff0c;memory等资源用量&#xff0c;以防止服务之前互相争抢资源&#xff0c;导致某些核心agent运行异常 2、systemd与cgro…...

C语言经典编程题100例(21-40)

21、练习3-2 计算符号函数的值对于任一整数n&#xff0c;符号函数sign(n)的定义如下&#xff1a;请编写程序计算该函数对任一输入整数的值。输入格式:输入在一行中给出整数n。输出格式:在一行中按照格式“sign(n) 函数值”输出该整数n对应的函数值。输入样例1:10输出样例1:sig…...

Rabbitmq业务难点

Rabbitmq业务难点1.消息生产者发送的消息无法路由到任何一个队列怎么处理?2.聊聊Rabbitmq的七种工作模式3.Rabbitmq的消息确认机制4.Rabbitmq的消息持久化5.发布确认模式如何确保生产者能够成功将消息投递到消息队列6. Rabbitmq基于队列设置消息过期时间和单独针对消息设置过期…...

服务器如何下载百度网盘文件?Linux服务器如何在百度网盘中连接、上传下载;在Linux服务器上下载百度云盘中的资料

前言 百度云提供Python包bypy进行远程服务器的对接然后下载&#xff1a; https://github.com/houtianze/bypy 可以通过pip直接下载&#xff0c;授权本人的百度云账号后&#xff0c;就可以直接使Linux电脑本地文件与百度网盘的apps&#xff08;我的应用数据&#xff09;/bypy目…...

Cesium-数字仿真-你总要了解

Cesium&#xff08;专注于时空数据的实时可视化) cesium是一款三维地球开源框架&#xff08;可以多平台、跨平台使用&#xff09;cesium隶属于美国AGI公司&#xff08;Analytical Graphics Incorporation&#xff09;&#xff0c;美国通用公司宇航部的工程师创始开源 周边产…...

原型、原型链、__proto__与prototype的区别、继承

一.什么是原型与原型链 根据MDN官方解释: JavaScript 常被描述为一种基于原型的语言——每个对象拥有一个原型对象[[Prototype]] &#xff0c;对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型&#xff0c;并从中继承方法和属性&#xff0c;一层一层、以此类…...

前端 面经

1说一说cookie sessionStorage localStorage 区别&#xff1f;解题思路得分点 数据存储位置、生命周期、存储大小、写入方式、数据共享、发送请求时是否携带、应用场景 标准回答 Cookie、SessionStorage、 LocalStorage都是浏览器的本地存储。 它们的共同点&#xff1a;都是存储…...

[oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置

RGB颜色 回忆上次内容 上次 首先了解了 索引颜色 \33[38;5;XXXm 设置 前景为索引色\33[48;5;XXXm 设置 背景为索引色 RGB每种颜色 可选0-5总共 6 级 想用 精确RGB值 真实地 大红色画个 大红桃心 ♥️ 有可能吗&#xff1f;&#xff1f;&#x1f914; rgb 模式 关于 RGB 模式…...

实战项目-用户评论数据情绪分析

目录1、基于词典的方法2、基于词袋或 Word2Vec 的方法2.1 词袋模型2.2 Word2Vec3、案例&#xff1a;用户评论情绪分析3.1 数据读取3.2 语料库分词处理3.3 Word2Vec 处理3.4 训练情绪分类模型3.5 对评论数据进行情绪判断目的&#xff1a;去判断一段文本、评论的情绪偏向在这里&a…...

day02 DOS(续)文本编辑快捷键 发展史

day02课堂笔记 1、常用的DOS命令&#xff08;续&#xff09; 1.1、del命令&#xff0c;删除一个或者多个文件 删除T1.class文件 C:\Users\Administrator>del T1.class 删除所有.class结尾的文件&#xff0c;支持模糊匹配 C:\Users\Administrator>del *.class T1.classT1…...

arm64与aarch64

结论&#xff1a; 目前arm64和aarch64概念已合并&#xff0c;新版64位arm程序统称aarch64. 问题引入&#xff1a; 存在部分机器&#xff0c;安装arm版本ss&#xff0c;会报错&#xff0c;提示 rootlocalhost ~]# rpm -ivh senseshiel50 59130arm64.rpm Verifying... ########…...

QString详解

QString存储16位Qchar(Unicode)字符串 QString使用隐式共享&#xff08;copy-on-write&#xff09;来提高性能。 什么是Unicode? unicode是一种国际标准&#xff0c;支持当今使用的大多数操作系统&#xff0c;他是US-ASCII和Latin-1的超集&#xff08;与子集相同字符编码相同…...

光子KANs:电信组件构建的光学神经网络革命

1. 光子KANs&#xff1a;电信组件构建的光学神经网络革命 在AI算力需求爆炸式增长的今天&#xff0c;传统电子计算架构正面临带宽瓶颈和能耗墙的严峻挑战。当我第一次在实验室用示波器测量光学神经网络的响应时间时&#xff0c;23纳秒的延迟让我震惊——这比最好的GPU还要快三个…...

OpenCrow:自托管多智能体AI平台的架构解析与实战部署指南

1. 项目概述&#xff1a;一个能自我进化的多智能体AI平台如果你和我一样&#xff0c;对AI智能体的潜力感到兴奋&#xff0c;但又对市面上那些要么功能单一、要么部署复杂的平台感到头疼&#xff0c;那么OpenCrow的出现&#xff0c;可能就是我们一直在等的那个“瑞士军刀”。这不…...

量子优化算法与经典算法在Max-Cut问题中的性能对比

1. 量子优化算法与Max-Cut问题概述 Max-Cut问题是图论中一个经典的NP难组合优化问题&#xff0c;其目标是将给定无向图的顶点划分为两个互不相交的子集&#xff0c;使得连接这两个子集的边权重之和最大。这个问题在统计物理、电路设计和网络聚类等领域有广泛应用背景。随着量子…...

终极Windows网络测速神器:iperf3-win-builds让你的网速测试变得简单快速

终极Windows网络测速神器&#xff1a;iperf3-win-builds让你的网速测试变得简单快速 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 想要精准测试你…...

LLM-PDF开源工具:高质量文档解析与结构化处理实战指南

1. 项目概述&#xff1a;当LLM遇上PDF&#xff0c;一个开源工具如何重塑文档处理流程最近在折腾一个项目&#xff0c;需要让大语言模型&#xff08;LLM&#xff09;去理解一批技术规格书和合同文档。这事儿听起来简单&#xff0c;不就是把PDF扔给模型&#xff0c;让它读吗&…...

如何用 writable 属性描述符限制 JavaScript 对象属性修改.txt

Lock wait timeout exceeded 表示事务等待行锁超时&#xff08;默认50秒&#xff09;&#xff0c;本质是被其他长事务或未提交操作阻塞&#xff0c;并非数据库性能问题&#xff1b;需通过INNODB_TRX和performance_schema定位锁源&#xff0c;排查索引缺失、MDL锁及锁链式等待。…...

RT-Thread Smart下基于74LV595的KSZ8081网卡复位与驱动移植实战

1. 硬件连接与复位逻辑解析 第一次拿到i.MX6ULL开发板时&#xff0c;我发现KSZ8081网卡的复位引脚竟然接在了74LV595芯片上&#xff0c;这和常见的直接连接GPIO的设计完全不同。这种设计虽然节省了GPIO资源&#xff0c;但给驱动开发带来了新挑战。 74LV595是典型的串行输入并行…...

喷墨设备怎么选?2026年UV喷码技术深度评测与选购指南

面对市场上琳琅满目的工业喷墨设备&#xff0c;尤其是UV喷墨设备厂家&#xff0c;采购者如何做出明智选择&#xff1f;本文将从技术前沿、核心参数与行业应用三大维度&#xff0c;为您提供一份详尽的评测与选购指南&#xff0c;并深度剖析以中防uv喷码机为代表的专业制造商如何…...

爱搜索 GEO 营销系统实效展示与能力验证

在当前的数字营销环境中&#xff0c;许多企业发现传统的 SEO 手段在应对 AI 驱动的搜索场景时显得力不从心。当潜在客户向大模型提问“哪家装修公司更靠谱”或“推荐几家铝板输送机厂家”时&#xff0c;如果品牌未能出现在 AI 生成的答案中&#xff0c;就意味着失去了最精准的流…...

【Prometheus】如何使用 `promtool` 工具来检查目标端点的指标是否符合规范?

使用 promtool 进行指标合规性验证:从开发到上线的标准化质量门禁 用户问题原文:“如何使用 promtool 工具来检查目标端点的指标是否符合规范?” 在超大规模生产环境中,Prometheus 监控着成千上万个由不同团队、使用不同语言(Java/Spring, Go, Python)开发的服务。一个不…...