题目描述:
给你一个 n x n 整数矩阵 grid ,请你返回 非零偏移下降路径 数字和的最小值。
非零偏移下降路径 定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。
示例:
解题思路:
存储第一行的最小值、下标和次最小值,后面每行如果下标与前面存储的下标相同,选择添加次最小值,若不同,添加最小值,并在该行都计算完成的情况下,更新最小值、下标和次最小值,以作为下一行计算使用,最后升序排列最后一行的结果,采用第一位。
相关代码:
class Solution {
public int minFallingPathSum(int[][] grid) {
int i=0,j=0,min1=0,min2=0,mini=0;
int[] min=new int[3];
min[0]=100;
min[2]=100;
for(i=0;i<grid[0].length;i++) {
if(grid[0][i]<min[0]) {
min[2]=min[0];
min[0]=grid[0][i];
min[1]=i;
} else if(grid[0][i]<min[2]) {
min[2]=grid[0][i];
}
}
for(i=1;i<grid.length;i++) {
min1=20000;
min2=20000;
for(j=0;j<grid[i].length;j++) {
if(j!=min[1]) {
grid[i][j]+=min[0];
} else {
grid[i][j]+=min[2];
}
if(grid[i][j]<min2) {
if(grid[i][j]<min1) {
min2=min1;
min1=grid[i][j];
mini=j;
} else {
min2=grid[i][j];
}
}
}
min[0]=min1;
min[1]=mini;
min[2]=min2;
}
Arrays.sort(grid[i-1]);
return grid[i-1][0];
}
}