892. 三维形体的表面积
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
请你返回最终形体的表面积。
示例 1:
输入:[[1,2],[3,4]]
输出:34
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:遍历数组,用一个变量来存总共有多少个立方体,另一个变量来存被遮盖的面数。
class Solution {
public int surfaceArea(int[][] grid) {
int block=0;//统计共有多少立方体
int count=0;//统计共有多少面被遮盖
for(int i=0;i<grid.length;i++)
{
for(int j=0;j<grid[i].length;j++)
{
block+=grid[i][j];//累加每个坐标上的立方体个数
if(grid[i][j]!=0)
{
count+=grid[i][j]-1;//统计上下被遮盖的面数,即上下叠放造成的遮盖
}
if(i>0)
{
//统计前后叠放造成的遮盖的面数,每一行只需要统计前面被遮盖的面数,因为当前行后面被遮盖的面数被后一行前面被遮盖的面数包含了,只需要统计一次
count+=Math.min(grid[i][j],grid[i-1][j]);
}
if(j>0)
{
count+=Math.min(grid[i][j],grid[i][j-1]);//统计左右叠放造成的遮盖面数
}
}
}
return block*6-count*2;
}
}