欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 892. 三维形体的表面积 python

程序员文章站 2024-03-15 11:26:59
...

leetcode 892. 三维形体的表面积

题目描述

leetcode 892. 三维形体的表面积 python

题解

思路:二话不说,先解一遍题目。
思路挺简单的,就是一个个格子地去算,先算柱子的表面积:假设有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

这也是一道找规律的题,总之就是自己先解一遍题目再说

相关标签: 刷题