给定一个包含非负整数的 网格 grid
,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
解题思路
最小路径和,动态规划。公式map[i][j]=min(map[i-1][j]+grid[i][j],map[i][j-1]+grid[i][j])
代码
class Solution {
public int minPathSum(int[][] grid) {
int m=grid.length;
int n=grid[0].length;
int map[][]=new int[m][n];
map[0][0]=grid[0][0];//(0,0)赋初值grid[0][0]
for(int i=1;i<m;i++) {//初始化第一列
map[i][0]=grid[i][0]+map[i-1][0];
}
for(int i=1;i<n;i++) {//初始化第一行
map[0][i]=grid[0][i]+map[0][i-1];
}
for(int i=1;i<m;i++) {
for(int j=1;j<n;j++) {
map[i][j]=Math.min(map[i-1][j]+grid[i][j], map[i][j-1]+grid[i][j]);
}
}
return map[m-1][n-1];
}
}