class Solution {
public int minPathSum(int[][] grid) {
//border scenario
int i = grid.length;
int j = grid[0].length;
int [][] dp = new int[i][j];
if (i ==0 ||j==0){
return 0;
}
dp[0][0] = grid[0][0];
//first row
for(int t =1; t<i; t++){
dp[t][0] = dp[t-1][0]+grid[t][0];
}
//first column
for(int k = 1; k<j; k++){
dp[0][k] = dp[0][k-1]+grid[0][k];
}
//other grids
for(int m = 1 ; m < i; m++){
for(int z = 1; z< j; z++){
dp[m][z] = Min(dp[m-1][z],dp[m][z-1])+grid[m][z];
}
}
return dp[i-1][j-1];
}
public int Min(int a , int b){
return a<b? a:b;
}
}