[Lintcode]Minimum Path Sum

来源:互联网 发布:简爱格妮斯旗舰店 淘宝 编辑:程序博客网 时间:2024/05/17 07:57

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.

可以用递归,二维DP或者一维DP解决。三种算法原理大体相同,在优化上一维DP使用滚动数组所以更有效率


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.length == 0 || grid[0].length == 0) return 0;                int width = grid[0].length;        int[] res = new int[width];                res[0] = grid[0][0];                for(int i = 1; i < width; i++) {            res[i] = res[i - 1] + grid[0][i];        }                for(int i = 1; i < grid.length; i++) {            res[0] = res[0] + grid[i][0];            for(int j = 1; j < grid[0].length; j++) {                res[j] = Math.min(res[j], res[j - 1]) + grid[i][j];            }        }        return res[res.length - 1];    }}


0 0