leetcode 892. 三维形体的表面积 python
程序员文章站
2024-03-15 11:26:59
...
题目描述
题解
思路:二话不说,先解一遍题目。
思路挺简单的,就是一个个格子地去算,先算柱子的表面积:假设有n个正方体立起来,那么它本身的表面积就是 n×6-(n-1)×2,如果是0个,那么表面积就是0(这里注意要特殊设定,否则按上面的式子算,是会得到负数的)。
然后每一个格子,再循环它的四个面,减去四个面与邻居贴着的面积。
上代码
class Solution:
def surfaceArea(self, grid: List[List[int]]) -> int:
res = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j]: # 计算本身的表面积
tmp = grid[i][j]*6-(grid[i][j]-1)*2
else: # 如果没有柱子的情况下
tmp = 0
for w,q in [[-1,0],[1,0],[0,1],[0,-1]]: # 循环4个面
raw,col,v = i+w,j+q,0 # v是用来记录重叠的面积的
if -1<raw<len(grid) and -1<col<len(grid[0]): # 这里是用来排除边界
# 如果超出边界,是不会对v做出改变的,就是v还是为0
v = min(grid[i][j],grid[raw][col]) # 重叠的部分为高度的最小值
tmp -= v # 之前单独的表面积减去重叠部分
res += tmp # 最后总结过加上每个柱子的表面积
return res
这也是一道找规律的题,总之就是自己先解一遍题目再说