?题解:遍历改二维数组每个位置,记录到当前位置最短路径和
定义
?设?dpdp?为大小?m \times nm×n?矩阵,其中?dp[i][j]dp[i][j]?的值代表直到走到?(i,j)(i,j)?的最小路径和。
转移方程:?
1当左边和上边都不是矩阵边界时:
grid[i][j]=grid[i][j]+Math.min(grid[i-1][j],grid[i][j-1]);
2.当只有左边是矩阵边界时:
grid[i][j]=grid[i][j]+grid[i][j-1];
3.当只有上边是矩阵边界时:
grid[i][j]=grid[i][j]+grid[i-1][j];
4.当左边和上边都是矩阵边界时:
?//就算是起点 ? ? ? ? ? ? ? ? if(i==0&&j==0) continue;
class Solution {
public int minPathSum(int[][] grid) {
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
//就算是起点
if(i==0&&j==0) continue;
//挨着左边境
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]=grid[i][j]+Math.min(grid[i-1][j],grid[i][j-1]);
}
}
//返回右下角最短路径
return grid[grid.length - 1][grid[0].length - 1];
}
}
?
|