本题注意点:要算底为正方形的立体的表面积,参考LeetCode463“作差”思想,所有cube*6再减去z方向上下块交界处*2,再减去xy平面上交界处*2。
https://blog.csdn.net/zuocuomiao/article/details/82191840
import numpy as np
def surfaceArea(grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
total = sum(sum(i) for i in grid)
z = 0
for i in grid:
for j in i:
z += max(0, j-1)
xy = 0
N = len(grid)
for i in range(N):
for j in range(N):
if i != N-1:
xy += min(grid[i][j], grid[i+1][j])
if j != N-1:
xy += min(grid[i][j], grid[i][j+1])
return total*6-(xy+z)*2
# samples:
grid = [[1,1,1],[1,0,1],[1,1,1]]
print(surfaceArea(grid))
grid = [[1,2],[3,4]]
print(surfaceArea(grid))