【Leetcode】 三维形体的表面积(每日一题)
题目链接: 三维形体的表面积
题意:在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
请你返回最终形体的表面积。
题解:感觉这题就是要把题读懂。。。
1、每个格子上是否有立方体。有立方体的话,计算就是周围一圈4个面*立方体个数+2(2是上下两个面)
2、考虑前面是否有立方体,有的话减去重合面积(重叠就是两个面都隐藏,那么就是重合个数*2)
3、考虑左边是否有立方体,有的话减去重合面积(重叠就是两个面都隐藏,那么就是重合个数*2)
画了前两个样例的情况。。(灵魂画手,5555)
代码:
1 class Solution { 2 public: 3 int surfaceArea(vector<vector<int>>& grid) { 4 int row = grid.size(); 5 int col = grid[0].size(); 6 int ans = 0; 7 for(int i = 0 ;i < row; i++){ 8 for(int j = 0 ;j < col ; j++){ 9 if(grid[i][j]){ 10 ans += grid[i][j]*4+2; //堆起来的 11 //前面的立方体 12 if(i > 0){ 13 ans -= min(grid[i-1][j],grid[i][j])*2; 14 } 15 //左边的立方体 16 if(j > 0){ 17 ans -= min(grid[i][j-1],grid[i][j])*2; 18 } 19 } 20 } 21 } 22 return ans; 23 } 24 };