LeetCode 64. Minimum Path Sum 解题报告

来源:互联网 发布:java 单个文件压缩 编辑:程序博客网 时间:2024/06/13 17:25

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.

题目意思:鉴于一 X ñ网格填充非负数,发现从左上角到右下角其路径最小化沿其路径的所有数字的总和。

注意:您只能在任何时间点向下或向右移动。


显然用dp

dp[i][j]表示从左上到达i,j的最小值

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

dp[i-1][j]表示从上面过来的

dp[i][j-1]表示从左边过来的

因为当前位置要达到最优 所以要在从上面过来和从左边过来找到最小

初值

dp[0][0]=a[0][0];

dp[0][j>0]=dp[0][j-1]+a[0][j];

dp[i>0][0]=dp[i-1][0]+a[i][0];

复杂度(m*n)


AC代码

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


原创粉丝点击