【LeetCode】64. 最小路径和 - Go 语言题解


一、题目描述

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

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

示例 1:

在这里插入图片描述

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 13111 的总和最小。
示例 2:
输入:grid = [[1,2,3],[4,5,6]]
输出:12
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100

题目链接:https://leetcode.cn/problems/minimum-path-sum


二、解题思路

我们将经过的格子的重量叠加到当前到的格子上,就是当前路径的和。

从左上角到右下角的路径,每走一步只能是向右走或者向下走,因此到达某一个格子只会是 从上面来 的或者 从左边来 的。

因此要找 最小 路径的话,我们在叠加当前格子时,要选择已经走过的代价比较小的那条路:选择上面或者左边格子比较小的那一个。

也有例外:第一横排只能是左边来的,第一竖列只能是上面来的。

我们可以一排一排遍历:

第一排:grid[i][j] = grid[i][j] + grid[i][j-1]
第一列:grid[i][j] = grid[i][j] + grid[i-1][j]
其他位置:

grid[i][j] = grid[i][j] + min(grid[i-1][j],grid[i][j-1])

三、我的题解

Go 语言代码:

func minPathSum(grid [][]int) int {
    m := len(grid)
    n := len(grid[0])
    for i:=0; i<m;i++{
        for j:=0; j<n;j++{
            if i==0 && j==0{
                continue
            }else if i==0{
                grid[i][j] = grid[i][j] + grid[i][j-1]
            }else if j==0{
                grid[i][j] = grid[i][j] + grid[i-1][j]
            }else{
                grid[i][j] = grid[i][j] + min(grid[i-1][j],grid[i][j-1])
            }
        }
    }
    return grid[m-1][n-1]
}

func min(a,b int) int {
    if a<=b {
        return a
    }else{
        return b
    }
}

评判结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值