def min_path_sum(grid):
m,n=len(grid),len(grid[0])
for i in range(m):
for j in range(n):
if i==0 and j==0: continue
elif i==0: grid[i][j]+=grid[i][j-1]
elif j==0: grid[i][j]+=grid[i-1][j]
else: grid[i][j]+=min(grid[i-1][j],grid[i][j-1])
return grid[m-1][n-1]
public int minPathSum(int[][] grid){
int m=grid.length,n=grid[0].length;
for(int i=0;i<m;i++)
for(int j=0;j<n;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 grid[i][j]+=Math.min(grid[i-1][j],grid[i][j-1]);
}
return grid[m-1][n-1];
}
In-place DP. min() vs Math.min(). elif vs else if.
def min_path_sum(grid):
m,n=len(grid),len(grid[0])
for i in range(m):
for j in range(n):
if i==0 and j==0: continue
elif i==0: grid[i][j]+=grid[i][j-1]
elif j==0: grid[i][j]+=grid[i-1][j]
else: grid[i][j]+=min(grid[i-1][j],grid[i][j-1])
return grid[m-1][n-1]
public int minPathSum(int[][] grid){
int m=grid.length,n=grid[0].length;
for(int i=0;i<m;i++)
for(int j=0;j<n;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 grid[i][j]+=Math.min(grid[i-1][j],grid[i][j-1]);
}
return grid[m-1][n-1];
}
1. First row/col one direction 2. Others: min of top and left 3. Return bottom-right