题目
思路
- 建立动态规划的dp数组
- dp[ i ][ j ] 代表到点(i,j)的最短距离,取每个点上一行相邻近的值,取最小值并加上A[ i ][ j ]并赋值给dp[ i ][ j ]
- 取最后一行的最小值
时间
8ms
代码
class Solution {
public int minFallingPathSum(int[][] A) {
int[][] dp=new int[A.length][A[0].length];
for(int i=0;i<A[0].length;i++){
dp[0][i]=A[0][i];
}
for(int i=1;i<A.length;i++){
for(int j=0;j<A[0].length;j++){
if(j==0){
dp[i][j]=Math.min(dp[i-1][j]+A[i][j],dp[i-1][j+1]+A[i][j]);
continue;
}
if(j==A[0].length-1){
dp[i][j]=Math.min(dp[i-1][j]+A[i][j],dp[i-1][j-1]+A[i][j]);
continue;
}
dp[i][j]=A[i][j]+Math.min(dp[i-1][j-1],
Math.min(dp[i-1][j],dp[i-1][j+1]));
}
}
int min=Integer.MAX_VALUE;
for(int i=0;i<dp[0].length;i++){
min=Math.min(min,dp[dp.length-1][i]);
}
return min;
}
}