题目:
892.三维形体的表面积
在 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
解题思路:
表面积 = 所有立方体的表面积总数 - 因叠放或相邻导致像是的面积
垂直方向:一个网格上有v个立方体,则在垂直方向上会有max(v-1, 0)个相邻面消失,再乘2
左右方向:左边网格上有m个立方体,右边网格上有n个立方体,则左右方向上会有min(m, n)个相邻的面,再乘2
前后方向:前面网格上有m个立方体,后面网格上有n个立方体,因此前后方向上会有min(m, n)个相邻的面,再乘2
代码:
class Solution:
def surfaceArea(self, grid: List[List[int]]) -> int:
n = len(grid)
s = 0
for i in range(n):
for j in range(n):
v = grid[i][j]
s += v * 6
s -= 2 * max(v-1, 0)
if j < n - 1:
s -= min(v, grid[i][j+1]) * 2
if i < n - 1:
s -= min(v, grid[i+1][j]) * 2
return s
提交记录: