题目描述:
给定一个包含非负整数的
m x n
网格grid
,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。
示例:
输入:
grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:
7
解释:因为路径 1→3→1→1→1 的总和最小。
思路:
因为 【每次只能向下或者向右移动一步】
所以求解方式和Leetcode 62 不同路径是一样的,每次在寻找当前节点的最小值时,只需要判断从左边走最小还是从上边走最小即可。
代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int road_sum[200][200] = {0};
road_sum[0][0] = grid[0][0];
for (int i = 0; i < m; ++i){
for (int j = 0; j < n; ++j){
if (i > 0 && j > 0)
road_sum[i][j] = min(road_sum[i-1][j],road_sum[i][j-1]) + grid[i][j];
else if (i > 0 && j == 0)
road_sum[i][j] = road_sum[i-1][j] + grid[i][j];
else if (i == 0 && j > 0)
road_sum[i][j] = road_sum[i][j-1] + grid[i][j];
else
continue;
}
}
return road_sum[m-1][n-1];
}
};
结果: