leetcode第64题最小路径和

101 阅读1分钟

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

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

我的JavaScript解法

/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function(grid) {
  const m = grid.length;
  const n = grid[0].length;
  let memo = new Array();
  for (let i = 0; i < m; i++) {
    memo[i] = new Array(n).fill(-1);
  }
  return dp(grid, m -1, n - 1, memo);
};


const dp = (grid, i, j, memo) => {
  if(i == 0 && j == 0)
    return grid[0][0];
  if(i < 0 || j < 0)
    return Number.MAX_VALUE;
  if(memo[i][j] != -1)
    return memo[i][j];
  memo[i][j] = Math.min(dp(grid, i-1, j, memo), dp(grid, i, j-1, memo)) + grid[i][j];
  return memo[i][j];
};

解析: 动态规划求最优值

  • 时间复杂度: O(n)O(n)
  • 空间复杂度: O(n2)O(n^2)