链接:
https://leetcode-cn.com/problems/minimum-path-sum/
主要思路:
1.这个题比较简单,因为题目要求了,只能向右或者向下走,逐行遍历计算最短路径就可以了。
2.第一行只能通过左侧的点计算最短路径,第一列只能通过上方的点计算最短路径。
3.其它的点要对比左侧和上方最短路径选择最小的计算。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid)
{
if (grid.size() == 0 || grid[0].size() == 0) {
return 0;
}
size_t height = grid.size();
size_t width = grid[0].size();
vector<vector<int>> minPathGrid = grid;
// 初始化第一行最短路径,第一行只能从左到右
minPathGrid[0][0] = grid[0][0];
for (size_t j = 1; j < width; j++) {
minPathGrid[0][j] = minPathGrid[0][j - 1] + grid[0][j];
}
// 第二行之后,有可能从左算出来,有可能上算出来
for (size_t i = 1; i < height; i++) {
// 每行第0个元素只能从上方计算
minPathGrid[i][0] = minPathGrid[i - 1][0] + grid[i][0];
for (size_t j = 1; j < width; j++) {
minPathGrid[i][j] = min(minPathGrid[i][j - 1], minPathGrid[i - 1][j]) + grid[i][j];
}
}
return minPathGrid[height - 1][width - 1];
}
};