/**
* @param {number[][]} grid
* @return {number}
*/
// 定义f[i][j] 为从(0,0)开始到达位置(i,j)的最小总和
//初始状态 f[0][0] = grid[0][0]
// 边界条件 f[i][0] = f[i][0]+grid[i][0]
// f[0][i] = f[0][i]+grid[0][i]
//转移方程:f[i][j] = min(f[i-1][j],f[i][j-1])+grid[i][j]
var minPathSum = function(grid) {
if(grid === null || grid.length === 0 || grid[0].length === 0){
return 0;
}
let m = grid.length;//行
let n = grid[0].length;//列
let f = new Array(m).fill(0).map(()=> new Array(n).fill(0))
f[0][0] = grid[0][0]
for(let i = 1; i < m; i++){
f[i][0] = f[i-1][0] + grid[i][0];
}
for(let j = 1; j < n; j++){
f[0][j] = f[0][j-1] + grid[0][j];
}
for(let i = 1; i < m; i++){
for(let j = 1; j < n; j++){
f[i][j] = Math.min(f[i-1][j],f[i][j-1]) + grid[i][j]
}
}
return f[m-1][n-1]
};