leetcode签到 892. 三维形体的表面积

题目

  1. 三维形体的表面积
    在 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

思路

这个题看题目看了半天。最后才明白:例[[1,2],[3,4]]是在[0,0]上有一个立方体,[0,1]上有两个,[1,0]三个,[1,1]四个。先按立方体数*6得到全部面积。
画图便可以理解,在一个坐标的位置上需要减掉(n-1)2个面,例两个立方体就要减掉两个面,三个立方体减掉四个面。y轴上的规律就是减去按x轴上立方体少的2。

代码

class Solution:
    def surfaceArea(self, grid):
        count=0
        for i in range(len(grid)):
            for j in range(len(grid)):
                count+=grid[i][j]*6
                if grid[i][j]>=2:
                    count-=(grid[i][j]-1)*2
                if i :
                    count-=min(grid[i][j],grid[i-1][j])*2
                if j :
                    count-=min(grid[i][j],grid[i][j-1])*2
        return  count
a=Solution()
grid=[[2]]
print(a.surfaceArea(grid))

猜你喜欢

转载自www.cnblogs.com/rmxob/p/12567057.html