题目描述
给定一个 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];
}
};