Surface Area of 3D Shapes
给一个2d数组, 里面是数字是当前坐标的叠着的正方体数, 求一共多少个面.
这个题就是弄清楚两个正方体分享一个面, 所以计算的时候要先比较相邻正方体的高矮, 然后减去矮的部分共享的面数即可. 然后数组值可能为0(没有正方体)
class Solution {
public:
int surfaceArea(vector<vector<int>>& grid) {
int res = 0;
for(int i = 0; i < grid.size(); i++){
for(int j = 0; j < grid[0].size(); j++) {
if(grid[i][j] != 0){ //2 -> 10
res += grid[i][j] * 6; // total six cubes
res -= 2*(grid[i][j] - 1); // 2*(grid[i][j] - 1) pairs (shares 1 surface)
if(i != grid.size() - 1){
res -= 2 * min(grid[i][j], grid[i + 1][j]);
}
if(j != grid[0].size() - 1){
res -= 2 * min(grid[i][j], grid[i][j + 1]);
}
}
}
}
return res;
}
};