63. Minimum Path Sum

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.

---

DP !!!

---

1. basic 二维数组

注意i=0, j=0,

其他min[i][j] = Math.min(min[i][j-1], min[i-1][j]) + grid[i][j];

public class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int[][] min = new int[m][n];

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

 

2. 不用二维数组,用一维滚动数组

public class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length, n = grid[0].length;
        int[] min = new int[n];

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

    }
}

 

posted @ 2013-09-10 00:25  LEDYC  阅读(176)  评论(0)    收藏  举报