3种解法 - 计算三维形体的表面积

本文介绍了如何计算三维形体的表面积,包括按立方体加、按立方体减和按坐标减三种解法。通过具体示例和详细解释,帮助理解每个解法的思路和实现过程,所有解法的时间复杂度和空间复杂度均为O(M*N)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


题目

在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。

每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。

请你返回最终形体的表面积。

示例 1:

输入:[[2]]
输出:10

示例 2:

输入:[[1,2],[3,4]]
输出:34

示例 3:

输入:[[1,0],[0,2]]
输出:16

示例 4:

输入:[[1,1,1],[1,0,1],[1,1,1]]
输出:32

示例 5:

输入:[[2,2,2],[2,1,2],[2,2,2]]
输出:46

提示:

1 <= N <= 50
0 <= grid[i][j] <= 50


题解

题目本身从描述看理解不太容易,我也是看了10几遍才理解,简单解释下:

示例一:[[2]]

表示在二维平面上,坐标为(0,0)的位置上,有一个高度为2的立方体

示例 2:[[1,2],[3,4]]

以左下角为原点(0,0),不同位置表示立方体高度,立方体的排列方式如下:
3 4
1 2

示例 3:[[1,0],[0,2]]

立方体的排列方式如下:
0 2
1 0

示例 4:[[1,1,1],[1,0,1],[1,1,1]]

立方体的排列方式如下:
1 1 1
1 0 1
1 1 1
在这里插入图片描述

示例 5:[[2,2,2],[2,1,2],[2,2,2]]

立方体的排列方式如下:
2 2 2
2 1 2
2 2 2


解法一(按立方体加)

思路:对每个坐标位置的立方体,对6个面暴露的部分累加求和,分别站在每个面前面,从前到后进行求解,当然从算法层面可以对程序进行优化,但为了代码可读性依然保留了写作初始思路。

  1. 只要有立方体(值大于0),则上下两个面的值都会暴露
  2. 对于第一排的立方体,暴露的面等于立方体高度(值大小)
  3. 对于后排的立方体,暴露的面等于高出前面立方体的高度(后面值减去当前值)
  • 时间复杂度:O(M*N)
  • 空间复杂度:O(1)
# author: suoxd123@126.com
class Solution:
    def surfaceArea(self, grid: List[List[int]]) -> int:
        cnt, m,n = 0, len(grid),len(grid[0])        
        for i in range(0,m):
            for j in range(0,n):
                # 上下面
                if grid[i][j] > 0:
                    cnt += 2
                # 前面
                if i == 0: # 第一排
                    cnt += grid[i][j]
                elif grid[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

具身小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值