【Golang】LeetCode 64. 最小路径和

64. 最小路径和

题目描述

思路

解决这道题的思路其实和「62. 不同路径」是类似的。我们使用二维动态规划来解决这个问题,维护一个dp二维数组,它的维度是(m + 1, n + 1)mn分别是数组grid的行数和列数)。

dp[i][j]的含义就是从(0, 0)(i - 1, j -1)所需要花费的最小路径和。我们很容易就能得出状态转移方程:dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1],也就是从上或从左移动到当前单元格所需要的花费的累加。

需要注意的是,在初始化dp数组的时候,我们设置其维度是(m + 1, n + 1),需要设置边界的值为math.MaxInt,否则dp在维护的时候将始终是0。设置入口dp[0][1] == 0

基于以上思路,我们可以开始写代码来解决这道问题。

Golang 题解

go 复制代码
func minPathSum(grid [][]int) int {
    m, n := len(grid), len(grid[0])
    dp := make([][]int, m + 1)
    for i := 0; i <= m; i ++ {
        dp[i] = make([]int, n + 1)
        if i == 0 {
            for j := 0; j <= n; j ++ {
                dp[i][j] = math.MaxInt
            }
        }
        dp[i][0] = math.MaxInt
    }
    dp[0][1] = 0

    for i := 1; i <= m; i ++ {
        for j := 1; j <= n; j ++ {
            dp[i][j] = min(dp[i - 1][j], dp[i][j -1]) + grid[i - 1][j - 1]
        }
    }

    return dp[m][n]
}
相关推荐
晨曦夜月5 分钟前
map与unordered_map区别
算法·哈希算法
图码30 分钟前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler0138 分钟前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
minglie11 小时前
实数列的常用递推模式
算法
代码小书生1 小时前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星1 小时前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
生成论实验室1 小时前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新
漂流瓶jz1 小时前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva
leoufung1 小时前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展
小O的算法实验室2 小时前
2026年IEEE TETCI,山区环境下基于双种群进化的协同无人机巡逻任务协同优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进