leetcode 892. 三维形体的表面积

在这里插入图片描述

初看这道题,棘手的地方在于两个立方体拼起来,会有两个面粘在一起,导致最后表面积减少1
同样的多个立方体,也会有多个面粘在一起
规律题

我们首先看多个立方体叠在一起的规律
一个立方体面积为6
两个立方体面积为6+6减去看不见的面(黏在一起的面)2 =》 6+6-2=10
两个立方体的面积为12-2=10
三个立方体的面积为18-4=12
四个立方体的面积为24-6=18
五个立方体的面积为30-8=22
六个立方体的面积为36-10=26
规律明显了
n个立方体的面积为n6-2(n-1)

我们再看左右衔接的立方体的面积
对每个堆叠的立方体,依次检查它四周衔接的立方体,减去它们之间的较小高度
例如,两个立方体和三个立方体衔接在一起,则两个立方体有两个面黏在一起,三个立方体也是有两个面黏在一起

重复上述操作,即可得到最后的总面积

class Solution:
    def surfaceArea(self, grid: List[List[int]]) -> int:
        ans=0

        d=[[0,-1],[-1,0],[0,1],[1,0]]
        def judge(i,j):
            if i>=0 and j>=0 and i<len(grid) and j<len(grid[i]) and grid[i][j]:
                return True
            return False

        for i in range(len(grid)):
            for j in range(len(grid[i])):
                if grid[i][j]==0:
                    continue
                n=grid[i][j]
                ans+=6*n-2*(n-1)
                for ti,tj in d:
                    if judge(i+ti,j+tj):
                        ans-=min(grid[i][j],grid[i+ti][j+tj])
        return ans

写得有点丑陋

在这里插入图片描述

更精简的代码

class Solution:
    def surfaceArea(self, grid: List[List[int]]) -> int:
        ans=0

        for i in range(len(grid)):
            for j in range(len(grid[i])):
                if grid[i][j]==0:
                    continue
                n=grid[i][j]
                ans+=6*n-2*(n-1)
                for ti,tj in ((i,j-1),(i-1,j),(i,j+1),(i+1,j)):
                    if ti>=0 and tj>=0 and ti<len(grid) and tj<len(grid[0]) and grid[ti][tj]:
                        ans-=min(grid[i][j],grid[ti][tj])
        return ans
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值