LeetCode——64. 最小路径和

题目:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

解题思路:
(1)由于路线只向下或者右走,所以在最上面的一排,和最左边的一排只有维一条路径可走。
(2)我们可以首先将最上面和最左边的所有到这个点的长度先算出来,然后用一个相同大小的二维数组temp保存下来。
(3)最后通过一个双重循环,此时只需从数组的[1][1]开始,通过比较这个点和左,上两点的和,选出最小的距离长度。最后只需要返回temp数组的最后一个值,即可知道到这个点的最小距离。(因为之前的算法中数组temp存的都是到这个点的最小距离)

class Solution {
    public int minPathSum(int[][] grid) {        
        int m = grid.length;//得到数组的行
        int n = grid[0].length;//得到数组的列
        int temp[][] = new int[m][n];//定义一个二维数组原来保存初始点到这个点的最小长度
        temp[0][0] = grid[0][0];//到初始点的距离就是源数组的第一个值
        for(int i=1;i<n;i++){
            temp[0][i] = temp[0][i-1]+grid[0][i];//将最左边的一列先初始化
        }
        for(int i=1;i<m;i++){
            temp[i][0] = temp[i-1][0]+grid[i][0];//将最上边的一列先初始化
        }
        
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                temp[i][j]=(grid[i][j]+temp[i-1][j])>(grid[i][j]+temp[i][j-1]) ? grid[i][j]+temp[i][j-1]:grid[i][j]+temp[i-1][j];//通过比较这个点和左,上两点的和,选出最小的距离长度
            }
        }
        return temp[m-1][n-1];//返回最后一个值
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值