您的位置:首页 > 文旅 > 美景 > 牛客热题:矩阵的最小路径和

牛客热题:矩阵的最小路径和

2024/10/5 9:46:09 来源:https://blog.csdn.net/weixin_61766635/article/details/139576126  浏览:    关键词:牛客热题:矩阵的最小路径和

📟作者主页:慢热的陕西人
🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:矩阵的最小路径和
    • 题目链接
    • 方法一:二维dp
      • 思路
      • 代码
      • 复杂度

牛客热题:矩阵的最小路径和

题目链接

矩阵的最小路径和_牛客题霸_牛客网 (nowcoder.com)

方法一:二维dp

思路

①状态表示:

d p [ i ] [ j ] dp[i][j] dp[i][j] 表示为从起点(0, 0)到(i, j)位置的最小路径和

②初始化:

​ 首先对于第一行第一列来说,他们的路径都只有一条,就是从他们的上方或者左方到达,因此我们可以直接计算出他们的路径和。

③状态转移方程:

​ 对于每一个位置来说,有两个路径来源,我们选取路径和小的就可以。

d p [ i ] [ j ] = m i n ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) + m a t r i x [ i ] [ j ] dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + matrix[i][j] dp[i][j]=min(dp[i1][j],dp[i][j1])+matrix[i][j]

④填表顺序:

​ 我们发现当前位置状态的获取都需要依赖上方和左方位置的状态,因此我们填表顺序为:

从上到下,从左到右。

⑤返回结果:

​ 因为答案要求的是从起点到终点的最小路径和,因此我们要返回的结果就是 d p [ m − 1 ] [ n − 1 ] dp[m - 1][n - 1] dp[m1][n1]

代码

int minPathSum(vector<vector<int> >& matrix) {int m = matrix.size();int n = matrix[0].size();vector<vector<int>> dp(m, vector<int>(n, 0));//初始化dp[0][0] = matrix[0][0];for(int i = 1; i < m || i < n; ++i){if(i < m) dp[i][0] = dp[i - 1][0] + matrix[i][0];if(i < n) dp[0][i] = dp[0][i - 1] + matrix[0][i];}for(int i = 1; i < m; ++i)for(int j = 1; j < n; ++j){dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + matrix[i][j];}return dp[m - 1][n - 1];}

复杂度

时间复杂度:遍历了一次二维dp数组: O ( m ∗ n ) O(m * n) O(mn)

空间复杂度:使用了额外的二维数组: O ( m ∗ n ) O(m * n) O(mn)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com