64. 最小路径和(JS实现)

1 题目

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

2 思路

这道题还是用动态规划来做,首先初始化第一行和第一列,然后状态转移方程d[i][j] = Math.min(d[i-1][j], d[i][j-1]) + num[i][j], d[i][j]为第i行第j列位置上最小的路径值

3代码

/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function(grid) {
    let m = grid.length;
    if (m === 0) return 0;
    let n = grid[0].length;
    if (n === 0 ) return 0;
    if (m === 1) {
        let sum = 0;
        for (let i=0; i<n; i++) {
            sum += grid[0][i];
        }
        return sum;
    };
    if (n === 1) {
        let sum = 0;
        for (let i=0; i<m; i++) {
            sum += grid[i][0];
        }
        return sum;
    }

    for (let i=0; i<m; i++) {
        for (let j=0; j<n; j++) {
            if (i === 0 && j > 0) {
               grid[0][j] += grid[0][j-1];
            } else if (j === 0 && i > 0) {
              grid[i][0] += grid[i-1][0];
            } else if (j > 0 && i > 0){
              grid[i][j] += Math.min(grid[i-1][j], grid[i][j-1]);
            }
        }
    }

    return grid[m-1][n-1];
};

猜你喜欢

转载自blog.csdn.net/zjw_python/article/details/106732293