牛客题霸 [矩阵的最小路径和] 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 hereint 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];}
};