Leetcode 64 Minimum Path Sum Javascript 解决方案

631 阅读1分钟

题意

原题
给个 square 二维数组。
从左上角爬到右下角。只能向右或者向下爬。求所经路径最小和

思路

参考 该博文

利用如下公式:

dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]

代码

/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function(grid) {
    let height = grid.length;
    if(!height){
        return 0;
    }
    let width = grid[0].length;
    if(!width){
        return 0;
    }
    for(let i = 1; i < height; ++i){
        grid[i][0] += grid[i - 1][0];
    }
    for(let j = 1; j < width; ++j){
        grid[0][j] += grid[0][j - 1];
    }
    for(let i = 1; i < height; ++i){
        for(let j = 1; j < width; ++j){
            // 下面这行很神奇 把加法 min 函数里面,反而会变快
            grid[i][j] = Math.min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j]);
        }
    }
    return grid[height - 1][width - 1];
};

探索

把 加法运算放 Math.min 函数里面 反而比 放外面 更快。很神奇,没想通。