题目描述
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.
Example 1:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.
分析
这道题的目的是求从左上角出发到达右下角的最短路径,可以采用动态规划的方法。
对于其中任意一点 grid[i][j] 想要到达该点只能从 grid[i-1][j] 或 grid[i][j-1] ,则只需要取二者中最小的作为到达这一点之前的路径,最终求得最终结果为 grid[m-1][n-1] (m和n为地图的长宽)
最终结果
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
vector<vector<int>> minpath(m, vector<int>(n, 0));
minpath[0][0] = grid[0][0];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 && j > 0) {
minpath[i][j] = minpath[i][j-1] + grid[i][j];
} else if (j == 0 && i > 0) {
minpath[i][j] = minpath[i-1][j] + grid[i][j];
} else if (i != 0 && j != 0){
minpath[i][j] = (minpath[i-1][j] > minpath[i][j-1] ? minpath[i][j-1] : minpath[i-1][j]) + grid[i][j];
}
}
}
return minpath[m-1][n-1];
}
};