题目
思路
当前点值为grid[i][j]
,则到达该点最小路径总和:dis[i][j] = min(dis[i][j-1],dis[i-1][j]) + grid[i][j]
第一列最小路径总和为:dis[i][j] = dis[i][j-1] + grid[i][j]
第一行最小路径总和为:dis[i][j] = dis[i-1][j] + grid[i][j]
。
从左上到右下遍历所有位置,可得右下点的最小路径总和。
代码
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int tmp = 0;
int n = grid.size();
int m = grid[0].size();
vector<vector<int>> dis;
vector<int> discol(m,0);
for(int i=0;i<n;i++)
{
dis.push_back(discol);
}
dis[0][0] = grid[0][0];
for(int i=0;i<n;++i)
{
for(int j=0;j<m;++j)
{
if(!i&&!j)
continue;
else if(i&&j)
{
dis[i][j] = min(dis[i][j-1],dis[i-1][j]) + grid[i][j];
}
else if(!i&&j)
{
dis[i][j] = dis[i][j-1] + grid[i][j];
}
else
{
dis[i][j] = dis[i-1][j] + grid[i][j];
}
}
}
return dis[n-1][m-1];
}
};