# 20150708 lintcode 总结 Minimum Path Sum

#### Easy Minimum Path Sum

34%
Accepted

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. You can only move either down or right at any point in time.

Time complexity: O(m*n); Space complexity: O(m*n)

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) {
if (grid == null || grid.length == 0 || grid[0].length == 0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
int[][] temp = new int[m][n];

for(int i = 0; i<m ; i++){
for(int j = 0; j<n; j++){
if(i==0 && j==0){
temp[0][0] = grid[0][0];
}else if(i==0){
temp[0][j] = temp[0][j-1] + grid[i][j];
}else if(j==0){
temp[i][0] = temp[i-1][0] + grid[i][j];
}else{
temp[i][j] = Math.min(temp[i-1][j], temp[i][j-1]) + grid[i][j];
}
}
}

<span style="white-space:pre">	</span>return temp[m-1][n-1];
}
}

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) {
if (grid == null || grid.length == 0 || grid[0].length == 0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
int[] temp = new int[n];

for(int i = 0; i<m; i++){
for(int j = 0; j<n; j++){
if(i == 0 && j == 0 ){
temp[0] = grid[0][0];
}else if(i == 0 ){
temp[j] = temp[j-1] + grid[0][j];
}else if(j == 0 ){
temp[0] = temp[0] + grid[i][0];
}else{
temp[j] = Math.min(temp[j], temp[j-1]) + grid[i][j];
}
}
}
return temp[n-1];
}
}

10-19 4615

05-31 2377

02-26 2619

02-04 1881

02-17 367

08-02 2625

07-17 1283

02-27 1960

05-25 1987

10-07 293