package leetcode;
/*Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right
which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.*/
public class Minimum_path_sum {
public static void main(String[] args) {
int[][] a = {{1,3,1},{1,5,1},{4,2,1}};
System.out.println(minPathSum(a));
}
public static int minPathSum(int[][] grid) {
for(int i = 0 ; i < grid.length ; i ++) {
for(int j = 0 ; j < grid[i].length ; j ++) {
if(i == 0 && j == 0) { //当为左上角元素时跳过
continue;
}else if( i == 0 ) {
grid[i][j] += grid[i][j-1]; //第一行元素,只能向右走
}else if( j == 0 ) {
grid[i][j] += grid[i-1][j]; //第一列元素,只能向下走
}else {
int min = Math.min(grid[i][j-1], grid[i-1][j]); //每一个方格都来自上或者左的和的最小值来替代,这样最后一个方格选好之后,及时路径和最短值
grid[i][j] += min;
}
}
}
return grid[grid.length-1][grid[0].length-1];
}
}