leetcode931下降路径最小和
注意:×
- 其实很简单的动态规划,写错的原因是钻牛角尖发现自己想的方法完全不可行
- 牛角尖:沉迷前缀和数组的方式创建n+1,m+2的“大一圈”的数组然后所有的位置都使用
myMin
来通过dp[i][j]=matrix[i][j]+min(dp[i−1][j−1],dp[i−1][j],dp[i−1][j+1])
来写 - 问题:要求的是上一层的最小值
myMin
,但是接下来的操作是matrix+myMin(1,2,3)
。会出现加法和min的冲突 - 结论:老老实实判定边界,什么边界就怎么取值
class Solution {
public int minFallingPathSum(int[][] matrix) {
int n = matrix.length;
int m = matrix[0].length;
int ans = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i != 0){
if (j==0){
matrix[i][j] = matrix[i][j] + Math.min(matrix[i-1][j], matrix[i-1][j+1]);
} else if (j == m - 1) {
matrix[i][j] = matrix[i][j] + Math.min(matrix[i-1][j], matrix[i-1][j-1]);
}else {
matrix[i][j] = matrix[i][j] + myMin(matrix[i-1][j-1], matrix[i-1][j], matrix[i-1][j+1]);
}
}
if (i==n-1){
ans = Math.min(ans, matrix[i][j]);
}
}
}
return ans;
}
int myMin(int a, int b, int c){
return Math.min(a, Math.min(b,c));
}
}