leetcode-64 最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
示例 2:
输入:grid = [[1,2,3],[4,5,6]]
输出:12
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 200
实现:
func minPathSum(grid [][]int) int {
// 获取矩阵grid长度和宽度
m := len(grid)
n := len(grid[0])
// 定义dp,用于存储grid各个节点最短路径和
dp := make([][]int, m)
// 初始化dp第一列,注意除第一行节点[0][0]dp是与grid一致外,其他节点均为与上一行的路径和
for i := 0; i < m; i++ {
dp[i] = make([]int, n)
dp[i][0] = grid[i][0]
if i > 0 {
dp[i][0] += dp[i-1][0]
}
}
// 初始化dp第一行,注意除第一行节点[0][0]dp是与grid一致外,其他节点均为与左节点的路径和
for j:=1; j<n; j++ {
dp[0][j] = dp[0][j-1]+grid[0][j]
}
// 对其他节点最短路径和进行遍历计算
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][j]
}
}
// 返回右下角节点最短路径
return dp[m-1][n-1]
}
// 辅助函数,用于返回两数之中的较小值
func min(a, b int) int {
if a <= b {
return a
}
return b
}
本文作者:505donkey
本文链接:https://www.cnblogs.com/505donkey/p/18455461
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步