今天的签到题是比较简单的,我们可先将所有方块的表面积算出来(小方块个数乘6),再减去它们遮住的那部分面积就好了。
对于不同柱体之间的遮盖面积,我们每次只要考虑该位置的右边和下边就好了,算法为方块数量较小的柱体的方块数*2。
对于柱间遮住的面积为:该柱体(方块数-1)*2。
int surfaceArea(vector<vector<int>>& grid) {
int n = grid.size();
if(n == 0)
return 0;
int sum = 0,diff = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
int num = grid[i][j];
if(num > 0)
{
sum += num*6;
diff += (num-1)*2;
if(i != n-1)
diff += min(num,grid[i+1][j])*2;
if(j != n-1)
diff += min(num,grid[i][j+1])*2;
}
}
}
return sum-diff;
}