题目描述
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time
题意从左上到右下,所有可能的路径中,求经过的元素和最小值。
动态规划基础题,dp每个状态由左边或者上边的值中,较小的值与当前状态的值 相加得到。
注意考虑边界情况。
创建一个二维数组或者vector容器dp,行列数与grid相同,同样每个位置的值记录了由左上到此位置的最短距离。
实现代码:
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
int row=grid.size();
int col=grid[0].size();
if(row==0 || col==0) return 0;
int dp[row][col];
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(i==0 && j==0) dp[0][0]=grid[0][0];
else if(i==0) dp[0][j]=grid[0][j]+dp[0][j-1];
else if(j==0) dp[i][0]=grid[i][0]+dp[i-1][0];
else dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
}
return dp[row-1][col-1];
}
};