Problem: 892. Surface Area of 3D Shapes 三维形体的表面积
耗时100%,上下表面+2,前后左右比较相邻块,若比旁边的高,则累加差值
Code
class Solution { public: int surfaceArea(vector<vector<int>>& grid) { int n = grid.size(); int ans = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(grid[i][j] == 0) continue; ans+=2; if(i - 1 >= 0) { if(grid[i-1][j] < grid[i][j]) ans += grid[i][j] - grid[i-1][j]; } else { ans += grid[i][j]; } if(j - 1 >= 0) { if(grid[i][j-1] < grid[i][j]) ans += grid[i][j] - grid[i][j-1]; } else { ans += grid[i][j]; } if(i + 1 < n) { if(grid[i+1][j] < grid[i][j]) ans += grid[i][j] - grid[i+1][j]; } else { ans += grid[i][j]; } if(j + 1 < n) { if(grid[i][j+1] < grid[i][j]) ans += grid[i][j] - grid[i][j+1]; } else { ans += grid[i][j]; } } } return ans; } };