题目描述
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
解题思路
此题是63题的变形(每次只能向下或者向右移动一步),参考63题的解法,可以转化为动态规划模型求解。
到终点的最小路径是到达正上方和最右方的最小路径加上终点位置的值,另外,需要考虑下输入只有一行或者一列的情况。
参考代码
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
for (int i=0;i<m;i++)
for (int j=0;j<n;j++){
if (i==0 && j==0) continue;#只用一个数
else if (i==0 && j!=0) grid[i][j] = grid[i][j-1] + grid[i][j];#单行
else if (i!=0 && j==0) grid[i][j] = grid[i-1][j] + grid[i][j];#单列
else grid[i][j] = min(grid[i-1][j],grid[i][j-1]) + grid[i][j];#m*n
}
return grid[m-1][n-1];
}
};
该问题是一个经典的动态规划问题,要求在给定的mxn网格中找到从左上角到右下角的最小路径和,每次只能向下或向右移动。解决方案是通过遍历网格,对于每个位置的值,将其上方和左方的值之和加上当前位置的值作为当前最小路径和。对于边界条件,如单行或单列,需要特殊处理。最后返回网格的右下角值作为结果。
480

被折叠的 条评论
为什么被折叠?



