题目描述
给定一个包含非负整数的 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];
}
};