zentan66 / daily-coding

日常手写算法,编程题
0 stars 0 forks source link

LeetCode-最小路径和 #9

Open zentan66 opened 3 years ago

zentan66 commented 3 years ago

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

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

例如:

输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小。

zentan66 commented 3 years ago

编程

/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function (grid) {
  const m = grid.length
  const n = grid[0].length
  const dp = Array.from(new Array(m), () => new Array(n).fill(0))
  for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      if (i === 0) {
        dp[0][j] = j === 0 ? grid[0][0] : grid[0][j] + dp[0][j - 1]
      }
      if (j === 0) {
        dp[i][0] = i === 0 ? grid[0][0] : grid[i][0] + dp[i - 1][0]
      }
      if (i !== 0 && j !== 0) {
        dp[i][j] = Math.min(dp[i][j - 1], dp[i - 1][j]) + grid[i][j]
      }
    }
  }
  return dp[m - 1][n - 1]
}

思路

算法:动态规划 难度:⭐️⭐️