64.最小路径和

2024/3/26

# Heading

    64.最小路径和 (opens new window)

    Tags: algorithms array dynamic-programming

    Langs: c cpp csharp dart elixir erlang golang java javascript kotlin php python python3 racket ruby rust scala swift typescript

    • algorithms
    • Medium (70.07%)
    • Likes: 1656
    • Dislikes: -
    • Total Accepted: 579.7K
    • Total Submissions: 826.1K
    • Testcase Example: '[[1,3,1],[1,5,1],[4,2,1]]'

    给定一个包含非负整数的 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
    /*
     * @lc app=leetcode.cn id=64 lang=javascript
     *
     * [64] 最小路径和
     */
    
    // @lc code=start
    /**
     * @param {number[][]} grid
     * @return {number}
     */
    var minPathSum = function (grid) {
      const m = grid.length
      const n = grid[0].length
      const dp = []
      for (let i = 0; i < m; i++) {
        dp[i] = []
        dp[i][0] = i > 0 ? grid[i][0] + dp[i - 1][0] : grid[i][0]
      }
    
      for (let i = 1; i < n; i++) {
        dp[0][i] = grid[0][i] + dp[0][i - 1]
      }
    
      for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
          dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
        }
      }
    
      return dp[m - 1][n - 1]
    }
    // @lc code=end
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33