class Solution {
public int surfaceArea(int[][] grid) {
int len = grid.length;
int surface1 = 0, surface2 = 0;
for(int i=0; i<len; i++){
for(int j=0; j<len; j++){
if(grid[i][j]>0)
surface1 += grid[i][j]*4+2;
if(i!=len-1){
surface2+=(grid[i][j]>grid[i+1][j]?grid[i+1][j]:grid[i][j])*2;
surface2+=(grid[j][i]>grid[j][i+1]?grid[j][i+1]:grid[j][i])*2;
}
}
}
return surface1-surface2;
}
}
首先计算所有方块的总表面积,然后按行列遍历,每一个点与临点的接触面积, 第i行与i+1行的接触面积,i列与i+1列的接触面积。减掉即可。