Labels

Tuesday, February 10, 2015

Minimum Path Sum


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.

Naive Way:第一眼就觉得是DP的题。而且逻辑应该就是取左边和上边来的路径较小的那支。

算法复杂度O(nm), space O(1),利用原来矩阵存贮中间结果。

public class Solution {
    public int minPathSum(int[][] grid) {
        // DP
        if(grid.length==0){return 0;}
        // base case
        for(int i = 1;i < grid.length;i++)
            grid[i][0] += grid[i-1][0];
        for(int j = 1;j < grid[0].length;j++)
            grid[0][j] += grid[0][j-1];
        // iteration
        for(int i = 1;i < grid.length;i++)
            for(int j = 1;j < grid[0].length;j++)
                grid[i][j] += Math.min(grid[i-1][j],grid[i][j-1]);
        return grid[grid.length-1][grid[0].length-1];
    }
}

 

No comments:

Post a Comment