题目描述:
在 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
解题思路:
1.在网格的右侧和下侧添加0,防止在判断的过程中数组越界
2.对于网格中每一个非零的数,其面积贡献与其他立方体无关的是上下表面积为2
3.对于每一个立方体判断其右侧和下侧是否有立方体,两个相邻的立方体的表面积损失是矮的立方体高度的二倍
class Solution(object):
def surfaceArea(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
area=0
for i in range(len(grid)):
grid[i].append(0)
grid.append([0]*len(grid[0]))
for i in range(len(grid)-1):
for j in range(len(grid[0])-1):
if grid[i][j]!=0:
area+=2+grid[i][j]*4-min(grid[i][j],grid[i][j+1])*2-min(grid[i][j],grid[i+1][j])*2
return area