在 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
题目标签:Geometry / Math
题目链接:LeetCode / LeetCode中国
题目与883. Projection Area of 3D Shapes很接近,很容易让人往投影方向想,其实并不是利用投影求表面积,因为投影会漏掉凹处的表面积。思路就是:最前和最后块的高度(如果是同一块,这个要加两次)+中间块的相邻高度差。
Language | Runtime | Memory |
---|---|---|
python3 | 92 ms | N/A |
class Solution:
def surfaceArea(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
res = 0
for g in grid + list(zip(*grid)):
res += len(g) - g.count(0)
for i, s in enumerate(g):
if i == 0 or i == len(g) - 1:
res += s * (1 + int(len(g) == 1))
if i > 0:
res += abs(g[i] - g[i-1])
return res