题目
条件:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
思路
这道题是一道经典的动态规范题,我们只要计算二维数组上每个元素的最小数字和即可,
- 对比上方和左方格子里的值谁小,加上它并替换
- 如果在上边界或左边界,直接加
- 一直到右下角,得到值
结束
代码
以下:
代码
/**
* @param {number[][]} grid
* @return {number}
**/
var minPathSum = function(grid) {
let n = grid.length; // 拿到行数
let m = grid[0].length // 拿到列数
// 行循环
for(let i = 0;i<n;i++) {
// 列循环
for(let j = 0; j< m;j++) {
// 如果在起点
if(i == 0 && j==0) {
grid[i][j] = grid[i][j]
} else if(i == 0) { // 如果在上边界
// 直接加上左方的值
grid[i][j] = grid[i][j] + grid[i][j-1]
} else if(j == 0) { // 如果在左边界
// 直接加上上方的值
grid[i][j] = grid[i][j] + grid[i-1][j]
} else {
// 取上方和左方中小的值
grid[i][j] += Math.min(grid[i-1][j],grid[i][j-1])
}
}
}
return grid[n-1][m-1]
};
结束
Q.E.D.