计算表面积

0X00 算法总结

  • 892. 三维形体的表面积
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 的两份贴合面积

你可能感兴趣的:(计算表面积)