给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
思路分析:
更新矩阵中元素的值,使得每个网格中的值表示从左上角到该网格的路径数字最小和。
对于矩阵首个元素值保持不变,第一行的元素(去除首个元素)值更新为该元素与左边元素的值之和,第一列的元素(去除首个元素)值更新为该元素与上边元素值之和。其余的网格元素的值更新为在原来值的基础上加上该网格上方和左方元素的最小值。这样矩阵中最后一个网格存储的值就是路径数字总和的最小值。
class Solution {
public int minPathSum(int[][] grid) {
int row=grid.length;
int column=grid[0].length;
for(int i=0;i<row;i++){
for(int j=0;j<column;j++){
if(i==0 && j==0){
continue;
}else if(i==0){
grid[0][j]+=grid[0][j-1];
}else if(j==0){
grid[i][0]+=grid[i-1][0];
}else{
grid[i][j]+=Math.min(grid[i-1][j],grid[i][j-1]);
}
}
}
return grid[row-1][column-1];
}
}