美文网首页
每天一题LeetCode【第47天】

每天一题LeetCode【第47天】

作者: 草稿纸反面 | 来源:发表于2017-04-14 00:21 被阅读116次

T64. Minimum Path Sum【Medium

题目

给出一个 m × n 的栅格,里面填着非负的数字。找到从左上角到右下角的最短(经过格子的数字之和最短)路径。

注意: 只能往右或者往下走。

思路

这题的思路是一个个往下遍历,分为三种情况来求到达那个格子的最短距离:

① 到第一行的格子只有一条路,所以到达的值 = 到左边格子的值 + 本格子的数

② 到第一列的格子只有一条路,所以到达的值 = 到上边格子的值 + 本格子的数

③ 到其他格子的方式简化为 两种从左边来从上面来 ,所以达到的值 = min(到左边格子的值,到上边格子的值) + 本格子的数

到这里思路就完了,看代码就好了~

代码

代码取自 Top Solution,稍作注释

public int minPathSum(int[][] grid) {
       //得到行列长度
       int m = grid.length, n = grid[0].length;
       for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                //求出第一行第一列栅格的最小值
                if(i == 0 && j != 0) grid[i][j] += grid[i][j-1];
                if(i != 0 && j == 0) grid[i][j] += grid[i-1][j];
                //其他栅格的最小值
                if (i != 0 && j != 0) grid[i][j] += Math.min(grid[i-1][j], grid[i][j-1]);
                
            }
        }
        //返回终点的最小值
       return grid[m-1][n-1]; 
}

相关文章

网友评论

      本文标题:每天一题LeetCode【第47天】

      本文链接:https://www.haomeiwen.com/subject/qngiattx.html