解题思路:这道题目和数字三角形的题目类似,这道题目也是求最小路径和,但这次给的是m*n的矩阵,求从节点11到节点mn的最小路径和,每次只能往右或者下走。这道题目我依旧是从下往上走的,从mn开始一直往左上求,求到节点11.
解题过程:给定一个矩阵Amn,定义一个矩阵Bmn,Bij为第ij的节点到mn节点的最小路径。具体求法为Bij=Aij+min(i+1,j),A(i,j+1))。
代码实现:
int min(int i,int j)
{
return i<j?i:j;
}
int minPathSum(vector<vector<int>> &grid) {
int m,n;
m=grid.size();
n=grid[0].size();
int f[m][n];
f[m-1][n-1]=grid[m-1][n-1];
for(int i=m-2;i>=0;i--)
{
f[i][n-1]=grid[i][n-1]+f[i+1][n-1];
}
for(int j=n-2;j>=0;j--)
{
f[m-1][j]=grid[m-1][j]+f[m-1][j+1];
}
for(int i=m-2;i>=0;i--)
{
for(int j=n-2;j>=0;j--)
{
f[i][j]=grid[i][j]+min(f[i+1][j],f[i][j+1]);
}
}
return f[0][0];
}
注意要点:这道题目也是很简单的,注意也没什么要注意的地方。
个人见解:解决这道题目最重要的就是想到沿着那条路走才是最好的路,如果从左上往右下走的话,那么计算量特别大,而且可能还求不出来。