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