牛客题霸 [矩阵的最小路径和] C++题解/答案

题目描述

给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。

题解:

dp[i]:表示到达第i行所需要的的最短路径
对于第一列,只能从上往下
对于第一行,只能从左往右
对于非第一行第一列的位置,到达有两个办法,从该点的左侧过来或者从上侧过来,取最小即可,然后加当前值

代码:

class Solution {
   
public:
    /** * * @param matrix int整型vector<vector<>> the matrix * @return int整型 */
    int minPathSum(vector<vector<int> >& matrix) {
   
        // write code here
        
        int m=matrix.size();//列
        int n=matrix[0].size();//行
        vector<int>dp(n);
        dp[0]=matrix[0][0];
        for(int j=1;j<n;j++)
        {
   
            dp[j]=dp[j-1]+matrix[0][j];//求出第一列的前缀和
        }
        for(int i=1;i<m;i++)
        {
   
            dp[0]+=matrix[i][0];
            for(int j=1;j<n;j++)
            {
   
                dp[j]=min(dp[j-1],dp[j])+matrix[i][j];
            }
        }
        return dp[n-1];
    }
};