2023-07-13每日一题
一、题目编号
931. 下降路径最小和
二、题目链接
点击跳转到题目位置
三、题目描述
给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。
下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1) 。
提示:
- n == matrix.length == matrix[i].length
- 1 <= n <= 100
- -100 <= matrix[i][j] <= 100
四、解题代码
class Solution {
public:
int minFallingPathSum(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
int dp[m+1][n+1];
memset(dp, 0, sizeof(dp));
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j){
dp[i][j] = INT_MAX;
}
}
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j){
if(i == 0){
dp[i][j] = matrix[i][j];
continue;
}
if(j - 1 >= 0){
dp[i][j] = min(dp[i][j], matrix[i][j] + dp[i-1][j-1]);
}
dp[i][j] = min(dp[i][j], matrix[i][j] + dp[i-1][j]);
if(j + 1 < n){
dp[i][j] = min(dp[i][j], matrix[i][j] + dp[i-1][j+1]);
}
}
}
int min0 = INT_MAX;
for(int i = 0; i < n; ++i){
min0 = min(min0, dp[m-1][i]);
}
return min0;
}
};
五、解题思路
(1) 本道题目通过动态规划算法来解决问题。
(2) 首先设置状态,dp[i][j] 代表的是到达(i,j)位置的下降路径 的 最小和 。定义初始状态,第一行的所有下降路径的最小和都是对应矩阵的值。
(3) 题目给出了每一个状态怎么转移过来,根据题目的提示进行状态转移,通过循环递推即可。文章来源:https://www.toymoban.com/news/detail-555027.html
(4) 最后返回最后一行的最小值,即为下降路径的最小和。文章来源地址https://www.toymoban.com/news/detail-555027.html
到了这里,关于2023-07-13 LeetCode每日一题(下降路径最小和)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!