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;
    }
};