个人思路总结:
==动态规划问题。==我们新建一个额外的 dp 数组,与原矩阵大小相同。在这个矩阵中,dp(i, j) 表示从坐标 (i, j) 到右下角的最小路径权值。我们初始化右下角的 dp 值为对应的原矩阵值,然后去填整个矩阵,对于每个元素考虑移动到右边或者下面,因此获得最小路径和我们有如下递推公式:
dp(i,j)=grid(i,j)+min(dp(i+1,j),dp(i,j+1))
注意边界情况(即第一行和第一列)。
代码如下:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int height = grid.size();
int width = grid[0].size();
int dp[height][width];
dp[0][0] = grid[0][0];
for(int i=1;i<height;i++)
dp[i][0] = grid[i][0]+dp[i-1][0];
for(int j=1;j<width;j++)
dp[0][j] = grid[0][j]+dp[0][j-1];
for(int i=1;i<height;i++)
{
for(int j=1;j<width;j++)
{
dp[i][j] = grid[i][j] + min(dp[i-1][j],dp[i][j-1]);
}
}
return dp[height-1][width-1];
}
};