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; }