已解决
Leetcode: 931.下降路径最小和(动态规划)
来自网友在路上 170870提问 提问时间:2023-10-09 13:19:34阅读次数: 70
最佳答案 问答题库708位专家为你答疑解惑
1. 题目解析
LeetCode链接
根据题目可以得出,当处于 [i][j] 位置时只能从 [i - 1][j - 1],[i - 1][j],[i - 1][j + 1] 这三个位置到达, 所以我们想要得到当前最小的路径和只需要得到上述三个位置的最小值加上该位置的值即可。
2. 解题思路
通过分析题目我们可以使用动态规划来解决这道题
首先我们要确定一下状态表示:
由于题目要求的是到达该位置的最小路径和, 所以我们可以用 dp[i][j] 来表示到达 [i, j] 位置时的最小路径和
然后就是确定状态转移方程:
状态转移方程一般都是从到达该点的最近一步得到
根据上述分析可以得出:
dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i - 1][j + 1])) + matrix[i - 1][j - 1]
最后是对 dp 数组进行初始化:
当我们在处理一些边界条件时可能会造成数组越界,所以我们可以创建一些虚拟节点来防止数组越界。
在创建虚拟节点时我们需要注意两个问题:
- 填入的值要保证不影响结果的准确性
- 要处理好下标的映射关系
为了保证第一行的准确性所以我们需要将最上边初始化为 0
因为我们取的是上一行三个数的最小值所以在初始化在第一列和最后一列时不能设置为 0 而是要初始化为一个较大的数,这样才能保证不影响结果的准确性。
3. 代码实现
class Solution {public int minFallingPathSum(int[][] matrix) {int n = matrix.length;int[][] dp = new int[n + 1][n + 2];for (int i = 1; i <= n; i++) {dp[i][0] = dp[i][n + 1] = Integer.MAX_VALUE;}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i - 1][j + 1])) + matrix[i - 1][j - 1];}}int min = Integer.MAX_VALUE;for (int i = 1; i <= n; i++) {if (dp[n][i] < min) {min = dp[n][i];}}return min;}
}
查看全文
99%的人还看了
相似问题
- vsto word 获取目录起始页和结束页,如目录起始位置为2、结束位置为3,返回2和3
- IP地理位置定位技术:保护网络安全的新利器
- WSL2安装ubuntu及修改安装位置,设置Ubuntu开机启动链接ssh服务
- ROS navigation栅格地图原点位置如何确定?
- 35. 搜索插入位置 --力扣 --JAVA
- 【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘
- 76基于matlab的免疫算法求解配送中心选址问题,根据配送地址确定最佳配送中心地址位置。
- 小程序判断是否授权位置信息和手动授权
- 计算机毕业设计 基于SpringBoot的车辆网位置信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
- 基于DOTween插件实现金币飞行到指定位置功能
猜你感兴趣
版权申明
本文"Leetcode: 931.下降路径最小和(动态规划)":http://eshow365.cn/6-17813-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 数据库查找、增加等基本操作
- 下一篇: 吴恩达《微调大型语言模型》笔记