LeetCode 64. Minimum Path Sum 解题报告

xiaoxiao2021-02-28  95

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]; } }

转载请注明原文地址: https://www.6miu.com/read-25847.html

最新回复(0)