在 N * N
的网格上,我们放置一些 1 * 1 * 1
的立方体。
每个值 v = grid[i][j]
表示 v
个正方体叠放在单元格 (i, j)
上。
返回结果形体的总表面积。
示例 1:
输入:[[2]] 输出:10
示例 2:
输入:[[1,2],[3,4]] 输出:34
示例 3:
输入:[[1,0],[0,2]] 输出:16
示例 4:
输入:[[1,1,1],[1,0,1],[1,1,1]] 输出:32
示例 5:
输入:[[2,2,2],[2,1,2],[2,2,2]] 输出:46
提示:
1 <= N <= 50
0 <= grid[i][j] <= 50
看题看了老半天,捂脸,扶额。
思路:先计算立方体的个数,而后计算接触面的个数,立方体*6-接触面*2就是所求。
下述代码段有一个没考虑的情况就是空,emmm...
class Solution {
public:
int surfaceArea(vector<vector<int>>& grid)
{
int count=0;
int discount=0;
for(int i=0;i<grid.size();i++)
for(int j=0;j<grid[0].size();j++)
{
count+=grid[i][j];//总块数
if(grid[i][j]>1)
{
discount+=grid[i][j]-1;
}
if((j<(grid[0].size()-1))&&(grid[i][j+1]!=0))//right
{
discount+=min(grid[i][j+1],grid[i][j]);
}
if((i<(grid.size()-1))&&(grid[i+1][j]!=0))//down
{
discount+=min(grid[i+1][j],grid[i][j]);
}
}
count=count*6;//总表面积
int surface=count-discount*2;
return surface;
}
};