三维形体的表面积
Surface Area of 3D Shapes
解
整体思路是统计有多少个立方体,总表面积是立方体的数量 × 6,但是因为相邻的会互相盖住,统计一下被盖住的面,然后减去被盖住的面。
class Solution {
public:
int surfaceArea(vector<vector<int>>& grid) {
int cube = 0, covered = 0;
for (int i = 0; i < grid.size(); i++) {
for (int j = 0; j < grid[0].size(); j++) {
cube += grid[i][j];
//这个是统计当前格子中有几个相邻面
covered += grid[i][j] > 1 ? grid[i][j] - 1 : 0;
//看看上一行同一列盖住了多少个面
covered += i > 0 ? min(grid[i - 1][j], grid[i][j]) : 0;
//看看上一列同一行盖住了多少个面
covered += j > 0 ? min(grid[i][j - 1], grid[i][j]) : 0;
}
}
return (cube << 2) + (cube << 1) - (covered << 1);
//return cube * 6 - covered * 2;
}
};