题目:Minimum Path Sum
连接:https://leetcode.com/problems/minimum-path-sum/#/description
原题: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.
解题思路:
题目言简意赅,在我看来算是最简单的动归问题,每个格子可以从上面或者左边运动过来,那移动到这个格子的最短距离就是MIN(上边格子的最短距离,下边格子的最短距离)+当前格子的数字,根据这条等式计算出运动到矩阵每个格子的步数。最后再输出右下角的步数即可。
代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
vector<vector<int>> path(m);
for(int i=0; i<m; i++) path[i].resize(n);
path[0][0] = grid[0][0];
for(int i=1; i<n; i++) path[0][i] = path[0][i-1]+grid[0][i];
for(int i=1; i<m; i++) path[i][0] = path[i-1][0]+grid[i][0];
for(int i=1; i<m; i++) {
for(int j=1; j<n; j++) {
path[i][j] = min(path[i-1][j], path[i][j-1]) + grid[i][j];
}
}
return path[m-1][n-1];
}
};