[LeetCode56]Minimum Path Sum

来源:互联网 发布:异形与人类谁厉害 知乎 编辑:程序博客网 时间:2024/06/05 18:10

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.

Analysis:

DP problem, use two dimension array

min[i][j] = min(min[i-1][j],min[i][j-1])+A[i][j];

init:

min[0][j] = A[0][j] , min[i][0] = A[i][j]

java

public int minPathSum(int[][] grid) {        int n = grid.length;int m = grid[0].length;int [][] min = new int[n][m];min[0][0] = grid[0][0];for(int i=1;i<n;i++){min[i][0] = grid[i][0]+min[i-1][0];}for(int i=1;i<m;i++){min[0][i] = grid[0][i]+min[0][i-1];}for(int i=1;i<n;i++){for(int j=1;j<m;j++){min[i][j] = Math.min(min[i-1][j], min[i][j-1])+grid[i][j];}}return min[n-1][m-1];    }
c++  similar

solution2:

利用滚动数组,更加节俭

java

public int minPathSum(int[][] grid) {<span style="white-space:pre"></span>int[] row = new int[grid[0].length];        for(int i=0;i<grid.length;i++){            for(int j=0;j<grid[0].length;j++){                if(j>0)                    row[j]=i>0?Math.min(row[j-1],row[j]):row[j-1];                row[j]+=grid[i][j];            }        }        return row[grid[0].length-1];    }







0 0
原创粉丝点击