每天一道leetcode(Day 60)


64. 最小路径和

题目描述

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

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

示例

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

解题思路

解题思路:动态规划

状态转移方程:grid(i,j)=grid(i,j)+min(grid(i+1,j),grid(i,j+1)),且在grid原数组上进行操作,不用开辟新的额外存储空间。

代码

/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function (grid) {
  let n = grid.length,
    m = grid[0].length;
  for (let i = n - 1; i >= 0; i--) {
    for (let j = m - 1; j >= 0; j--) {
      if (i === n - 1 && j !== m - 1) {
        grid[i][j] = grid[i][j] + grid[i][j + 1];
      } else if (j === m - 1 && i !== n - 1) {
        grid[i][j] = grid[i][j] + grid[i + 1][j];
      } else if (j != m - 1 && i !== n - 1) {
        grid[i][j] = grid[i][j] + Math.min(grid[i + 1][j], grid[i][j + 1]);
      }
    }
  }
  return grid[0][0];
};

参考

64. 最小路径和


文章作者: CassielLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 CassielLee !
评论
  目录