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

leetcode 892. 三维形体的表面积

题目描述

在这里插入图片描述

题解

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

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

发布了47 篇原创文章 · 获赞 12 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览