题
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
请你返回最终形体的表面积。
public int surfaceArea(int[][] grid) {
int sum = 0;
for(int i= 0;i<grid.length;i++){
int[] temp = grid[i];
for(int j=0;j<temp.length;j++){
int a = grid[i][j];
//横着一圈应该是 a*4 上下是2
if(a>0){
sum +=a*4+2;
}
//如果不是第一竖排 看看左边有没有 如果有 减去贴着的面积
if(i!=0){
int left = grid[i-1][j]; //左边的高度
if(left>0){
//如果左边存在 判断自己和左边谁高
// 如果左边高 自己左面积就删除 如果自己高 减去左边的高度 木桶效应
sum -= left>a?a:left;
}
}
//同理 判断右边
if(i!=grid.length-1){
int right = grid[i+1][j];
if(right>0){
sum -= right>a?a:right;
}
}
//前排
if(j!=0){
int front = grid[i][j-1];
if(front>0){
sum -= front>a?a:front;
}
}
//后排
if(j!=temp.length-1){
int rear = grid[i][j+1];
if(rear>0){
sum -= rear>a?a:rear;
}
}
}
}
return sum;
}