1、题目:
在 N * N
的网格上,我们放置一些 1 * 1 * 1
的立方体。
每个值 v = grid[i][j]
表示 v
个正方体叠放在单元格 (i, j)
上。
返回结果形体的总表面积。
示例 1:
输入:[[2]] 输出:10
示例 2:
输入:[[1,2],[3,4]] 输出:34
示例 3:
输入:[[1,0],[0,2]] 输出:16
示例 4:
输入:[[1,1,1],[1,0,1],[1,1,1]] 输出:32
示例 5:
输入:[[2,2,2],[2,1,2],[2,2,2]] 输出:46
提示:
1 <= N <= 50
0 <= grid[i][j] <= 50
2、思路:
顶面积底面积一样计算,侧面积从0,0点开始遍历(不分层),到任何一个点,sum+4*节点个数-2*(min(左侧方块个数,当前方块个数))-2(min(下侧方块个数,当前方块个数));应该不难理解,就是叠积木,把重叠的面积减掉;
3、代码:
def surfaceArea(self, grid): """ :type grid: List[List[int]] :rtype: int """ if not grid: return 0 count = 0 a,b,sumn = 0,0,0 for i,row in enumerate(grid): for j,col in enumerate(row): sumn += col if not col: continue count+=1 if i > 0: a+=min(grid[i-1][j],col) if j > 0: b+=min(grid[i][j-1],col) return sumn*4+count*2-(a+b)*2