力扣算法篇:出界的路径数

2023-11-23 00:10
文章标签 算法 路径 力扣 出界

本文主要是介绍力扣算法篇:出界的路径数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
题解:
动态规划五部曲:
1、确定dp数组及其下标含义
dp[i][j][k]表示球移动i次之后位于坐标(j,k)的路径数,由题意i从0到maxmove遍历,累加出界的路径数即可
2、确定递推式
球移动了i次之后位于坐标(j,k),(不出界且i小于maxmove的情况下)则移动i+1次之后,球必定位于与坐标(j,k)相邻的一个坐标(j1,k1),如果此时球出界了 则将dp[i][j][k]的值加到出界的路径数,否则 将dp[i][j][k]的值加入到dp[i+1][j1][k1]

//实际情况要求余
if(出界){count+=dp[i][j][k];
}else{dp[i+1][j1][k1]+=dp[i][j][k];
}

3、初始化

//移动0次到起始位置的路径数为1
dp[0][startRow][startColumn] = 1//移动0次到非起始位置的路径数为0
dp[0][j][k] = 0;

4、确定遍历顺序
从移动次数为0到maxmove,从上到下,从左到右,
5、举例推导dp
暂不做推导

class Solution {
public://求余数static constexpr int MOD = 1'000'000'007;int findPaths(int m, int n, int maxMove, int startRow, int startColumn) {//移动方向 上下左右 二维数组vector<vector<int>>  directions = {{-1,0},{1,0},{0,-1},{0,1}};//出界路径数int outCounts = 0;//dp数组 三维vector<vector<vector<int>>> dp(maxMove+1,vector<vector<int>>(m,vector<int>(n,0)));//初始化dp[0][startRow][startColumn] = 1;//计算dp数组 累加每个i的出界路径数 i在最外面 然后从上到下 从左到右for(int i = 0;i<maxMove;i++){for(int j = 0;j<m;j++){for(int k = 0;k<n;k++){int count = dp[i][j][k];//第一次进入 起始点if(count>0){//移动for(auto &direction:directions){//移动点int j1 = j + direction[0];int k1 = k + direction[1];//判断是否出界if(j1>=0 && j1<m && k1>=0 && k1<n){//未出界dp[i+1][j1][k1] = (dp[i+1][j1][k1]+count)%MOD;}else{//出界 加入出界路径数outCounts = (outCounts+count)%MOD;}}}}}}return outCounts;}
};

这篇关于力扣算法篇:出界的路径数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/413904

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1