给定一个方形整数数组
A
,我们想要得到通过A
的下降路径的最小和。下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列。
public int minFallingPathSum(int[][] A)
{
int m = A.length; // 行数
int n = A[0].length; // 列数
int a, b, c;
int i, j;
int minSum = Integer.MAX_VALUE; // 下降路径最小和
// 只有一行
if (m == 1)
{
Arrays.sort(A[0]);
return A[0][0];
}
for (i=1; i<m; i++)
{
a = Integer.MAX_VALUE;
b = Integer.MAX_VALUE;
c = Integer.MAX_VALUE;
for (j=0; j<n; j++)
{
a = A[i-1][j] + A[i][j];
// 到达最右边
if (j != n-1)
{
b = A[i-1][j+1] + A[i][j];
}
// 到达最左边
if (j != 0)
{
c = A[i-1][j-1] + A[i][j];
}
// 取最小的值
A[i][j] = min(a, b, c);
// 最后一行
if (i == m-1)
{
minSum = Math.min(minSum, A[i][j]);
}
}
}
return minSum;
}
int min(int a, int b, int c)
{
return Math.min(Math.min(a, b), c);
}