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 Solution { public int minPathSum(int[][] grid) { if(grid.length==0){ //grid为空 return 0; }else if(grid.length==1){ //grid只有一行 int result=0; for(int i=0;i<grid[0].length;i++){ result= result+grid[0][i]; } return result; }else if(grid[0].length==1){ //grid只有一列 int result=0; for(int i=0;i<grid.length;i++){ result= result+grid[i][0]; } return result; }else{ int row = grid.length; int col = grid[0].length; int [][]dp= new int[row][col]; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ dp[i][j]=0; } } dp[0][0]=grid[0][0]; for(int i=1;i<row;i++){ //第一列 dp[i][0]=dp[i-1][0]+grid[i][0]; } for(int i=1;i<col;i++){ //第一行 dp[0][i]=dp[0][i-1]+grid[0][i]; } for(int i=1;i<row;i++){ for(int j=1;j<col;j++){ dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j]; } } return dp[row-1][col-1]; } } }