题目
方法一:动态规划
public class MinPathSum {
public int minPathSum(int[][] grid) {
//动态规划,最后一步走到右下角,只有两种情况,1、从上边来。2、从左边来。F(x,y) = min(F(x,y-1),F(x-1,y));
//依次类推,以左上角开始,需求出各个位置最小的值是多少。
int x = grid.length;
int y = grid[0].length;
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
if (i==0 && j==0) {
continue;
} else if (i==0) {
grid[i][j] = grid[i][j-1] + grid[i][j];
} else if (j==0) {
grid[i][j] = grid[i-1][j] + grid[i][j];
} else {
grid[i][j] = Math.min(grid[i][j-1], grid[i-1][j]) + grid[i][j];
}
}
}
return grid[x-1][y-1];
}
public static void main(String[] args) {
MinPathSum minPathSum = new MinPathSum();
//int[][] grid = {{1,3,1},{1,5,1},{4,2,1}};
int[][] grid = {{1,2,3},{4,5,6}};
System.out.println(minPathSum.minPathSum(grid));
}
}
LeetCode测试结果