动态规划
public static int minPathSum(int[][] grid) {
if (grid == null || grid.length == 0 || grid[0].length == 0) {
return 0;
}
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 if (j>0&&i>0)
grid[i][j]=Math.min(grid[i-1][j],grid[i][j-1])+grid[i][j];
}
}
return grid[grid.length-1][grid[0].length-1];
}
学有所思
- 设置状态:向下走、向右走
- 转移方程:i= =0&&j!=0 :
grid[i][j]=grid[i][j]+grid[i][j-1];
j==0&&i!=0 :grid[i][j]=grid[i][j]+grid[i-1][j];
j>0&&i>0:grid[i][j]=Math.min(grid[i-1][j],grid[i][j-1])+grid[i][j];
- 初始条件:
dp[0][0]==grid[0][0]
- 计算顺序:由小到大