5.5
这种题都差不多吖。弄一个flag,存起来
public class Solution { /** * @param grid: a list of lists of integers. * @return: An integer, minimizes the sum of all numbers along its path */ public int minPathSum(int[][] grid) { // write your code here int m = grid.length; int n = grid[0].length; int[][] flag = new int[m][n]; setFlag(grid,flag,m,n); /* for(int i = 0;i<m;i++){ for(int j =0;j<n;j++){ System.out.print(flag[i][j] + " "); } System.out.println(""); } */ return flag[0][0]; } public void setFlag(int[][] grid,int[][] flag,int m,int n){ flag[m-1][n-1] = grid[m-1][n-1]; for(int i = m-2;i >=0 ;i--){ flag[i][n-1] = flag[i+1][n-1] + grid[i][n-1]; } for(int i = n-2;i >=0 ;i--){ flag[m-1][i] = flag[m-1][i+1] + grid[m-1][i]; } for(int i = m-2;i >= 0;i--){ for(int j = n-2;j >= 0; j--){ flag[i][j] = grid[i][j] + Math.min(flag[i+1][j],flag[i][j+1]); } } } }