private static int solution(int[][] data, int n, int m) {
int res = 0;
//上下面固定
res += n * m * 2;
//第一层前后左右固定
//res += 8; 我tm把它写死了 没变成下面的
res += m * 2 + n * 2;
for (int i = 0; i <n ; i++) {
for (int j = 0; j <m ; j++) {
int the_cur = data[i][j] - 1;//除去第一层当前位置的正方体个数
int the_left_cur = j == 0 ? 0 : data[i][j-1] - 1;//除去第一层当前位置的左边正方体个数
int the_right_cur = j == m-1 ? 0 : data[i][j+1] - 1;//除去第一层当前位置的左边正方体个数
int the_up_cur = i == 0 ? 0 : data[i-1][j] - 1;//除去第一层当前位置的前边正方体个数
int the_down_cur = i == n-1 ? 0 : data[i+1][j] - 1;//除去第一层当前位置的后边正方体个数
//当前立方体前后左右增加的表面积
int the_left_cur_cut = the_left_cur >= the_cur ? 0 : the_cur - the_left_cur;
int the_right_cur_cut = the_right_cur >= the_cur ? 0 : the_cur - the_right_cur;
int the_up_cur_cut = the_up_cur >= the_cur ? 0 : the_cur - the_up_cur;
int the_down_cur_cut = the_down_cur >= the_cur ? 0 : the_cur - the_down_cur;
int the_real_cur_area = the_left_cur_cut + the_right_cur_cut + the_up_cur_cut + the_down_cur_cut;
res += the_real_cur_area;
}
}
return res;
}