非負整数m×nのメッシュ与えられ、下左から右への経路を見つけるようにパスの最小数の合計。
注:あなたが唯一のダウンまたは右に一歩を移動することができます。
例:
入力:
[
[1,3,1]、
[1,5,1]、
[4,2,1]
]
出力:7
説明:最小和ためパス→1→1→3 1→ 1 における。
アイデア:DP
class Solution {
public int minPathSum(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
int[][] dp = new int[m][n];
int count = 0;
for(int i=0;i<m;i++)
{
count += grid[i][0];
dp[i][0] = count;
}
count = 0;
for(int i=0;i<n;i++)
{
count += grid[0][i];
dp[0][i] = count;
}
if(m==0)
return dp[0][n-1];
if(n==0)
return dp[m-1][0];
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
}
return dp[m-1][n-1];
}
}