Featured image of post 64. 最小路径和

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

解法一:动态规划

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
func minPathSum(grid [][]int) int {
    h, w := len(grid), len(grid[0])
    var dp [2][]int
    dp[0], dp[1] = make([]int, w), make([]int, w)
    dp[0][0] = grid[0][0]
    for j := 1; j < w; j++ {
        dp[0][j] = dp[0][j-1] + grid[0][j]
    }
    for i := 1; i < h; i++ {
        for j := 0; j < w; j++ {
            dp[1][j] = dp[0][j]
            if j > 0 && dp[1][j-1] < dp[1][j] {
                dp[1][j] = dp[1][j-1]
            }
            dp[1][j] += grid[i][j]
        }
        dp[0] = dp[1]
    }
    return dp[0][w-1]
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/07/22 10:24:16
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计