传送门:https://leetcode-cn.com/contest/weekly-contest-99/problems/surface-area-of-3d-shapes/spa
class Solution { public: int surfaceArea(vector<vector<int>>& grid) { int area = 0; //up/down for(int i = 0; i < grid.size(); i++) { for(int j = 0; j < grid[0].size(); j++) { if(grid[i][j] > 0) area += 2; //v为0的没有表面积 } } // cout << area << '\n'; //left/right for(int j = 0; j < grid[0].size(); j++) { for(int i = 0; i < grid.size(); i++) { if(grid[i][j]) { if(i == 0 || grid[i-1][j] == 0) //最左边或左边为空 area += grid[i][j]; else area += abs(grid[i-1][j]-grid[i][j]); //相邻面积之差 } else if(i && grid[i-1][j]) //当前为0但前左边一个不为0 area += grid[i-1][j]; } if(grid[grid.size()-1][j]) area += grid[grid.size()-1][j]; //最右边的侧面 } // cout << area << '\n'; //front/back for(int i = 0; i < grid.size(); i++) { for(int j = 0; j < grid[0].size(); j++) { if(grid[i][j]) { if(j == 0 || grid[i][j-1] == 0) //最前边或前边为空 area += grid[i][j]; else area += abs(grid[i][j-1]-grid[i][j]); //相邻面积之差 } else if(j && grid[i][j-1]) //当前为0但前一个不为0 area += grid[i][j-1]; } if(grid[i][grid[0].size()-1]) area += grid[i][grid[0].size()-1]; //最后边的侧面 } // cout << area << '\n'; return area; } };