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) {
// write your code here
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];
}
}
方法2:time complexity: O(m*n); space complexity: O(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) {
// write your code here
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];
}
}