由题意可知,这道题为一道基础的动规题,我们可以很快的找到最优子结构。
grid[i][j] = min(grid[i - 1][j],grid[i][j -1])
我们只需要给最边缘求值,最后即可得到结果。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid.size(),m = grid[0].size();
for(int i = 1;i < n;i++)grid[i][0] += grid[i - 1][0];
for(int i = 1;i < m;i++)grid[0][i] += grid[0][i - 1];
for(int i = 1;i < n;i++){
for(int j = 1;j < m;j++){
grid[i][j] += min(grid[i - 1][j],grid[i][j - 1]);
}
}
return grid[n - 1][m - 1];
}
};