0X00 算法总结
class Solution:
def surfaceArea(self, grid: List[List[int]]) -> int:
if len(grid) == 0: return 0
m, n = len(grid), len(grid[0])
ans = 0
for x in range(m):
for y in range(n):
h = grid[x][y]
if h > 0:
ans += (h << 2) + 2
# 减去两份贴合的面积
ans -= (min(grid[x-1][y], h) << 1) if x > 0 else 0
ans -= (min(grid[x][y-1], h) << 1) if y > 0 else 0
return ans
分别计算每个柱体的表面积, 然后减去每个柱子的贴合部分
比如有下面这些柱子:
6
2
3
4
在计算 2 的时候减去 2 6 的两份贴合面积
网友评论