leetcode 892. Surface Area of 3D Shapes 三维形体的表面积

leetcode 892. Surface Area of 3D Shapes 三维形体的表面积

leetcode 2020年3月 每日一题打卡

题目:
在 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes

思路:

  1. “哨兵”方法处理边界。
  2. 依次算每个格子露出的面积,每个格子的表面积与上下左右是否有立方体以及有几个有关。
  3. 时间复杂度O(N ^2)

细节:

  1. insert() 函数用于将指定对象插入列表的指定位置。list.insert(index, obj) 。index – 对象 obj 需要插入的索引位置。obj – 要插入列表中的对象。

代码:

class Solution(object):
    def surfaceArea(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        # 总时间复杂度O(N^2)
        # “哨兵”方法处理边界
        n= len(grid)
        tem=[0,0]
        for i in range(n):
            grid[i].insert(n,0)
            grid[i].insert(0,0)
            tem.append(0)
        grid.insert(n,tem)
        grid.insert(0,tem)
        print(grid)
        s=0
        # 依次算每个格子露出的面积,每个格子的表面积与上下左右是否有立方体以及有几个有关
        for i in range(1,n+1):
            for j in range(1,n+1):
                if grid[i][j]==0:
                    continue
                s+=2 #顶底面积
                s+=max(0,grid[i][j]-grid[i-1][j])
                s+=max(0,grid[i][j]-grid[i+1][j])
                s+=max(0,grid[i][j]-grid[i][j-1])
                s+=max(0,grid[i][j]-grid[i][j+1])
        
        return s

本博客为原创作品,欢迎指导,转载请说明出处,附上本文链接,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值