关键点
考虑有多少个面被遮挡
举例
如
1 2
3 4
首先考虑竖面遮挡:
1与2之间被遮挡了2面
1与3之间被遮挡了2面
2与4之间被遮挡了4面
4与3之间被遮挡了6面
2*min(M,N)
其次考虑横面被遮挡
1没有
2有2面被遮挡
3有4面被遮挡
4有6面被遮挡
2*(N-1)
sum*6-被遮挡的面数 即可
代码
class Solution(object):
def surfaceArea(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
count=0
n=len(grid)
sumnum=0
for i in range(n):
for j in range(n):
sumnum+=6*grid[i][j]-2*((grid[i][j]-1 if grid[i][j]!=0 else 0))
if(j!=n-1):
count+=2*min(grid[i][j],grid[i][j+1])
if(i!=n-1):
count += 2 * min(grid[i][j], grid[i+1][j])
sumnum-=count
return sumnum