(Python)LeetCode892:三维形体的表面积

该题重点在于理解输入数据的含义即题意,具体见下面给出的思路解析。

题目

在 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. 1 <= N <= 50
  2. 0 <= grid[i][j] <= 50

Python实现

思路 *以输入[[1,2,2],[2,1,0],[1,2,1]]为例,遍历所有坐标点,判断每点上是否有立方体,若有number个,则加4(侧面积)number+2(上下底面积),再减去该坐标点上下左右四个坐标是否有立方体,若有则减去与该坐标点立方体数量最小值(即重合面积)。
在这里插入图片描述

class Solution(object):
    def surfaceArea(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        result = 0
        N = len(grid)
        for row in range(N):
            for column in range(N):
                number = grid[row][column]
                r = 4*number+2
                if number == 0:continue
                pre_row = row - 1
                pre_column = column - 1
                if pre_row >= 0:
                    r -= min(grid[pre_row][column],number)
                if pre_column >= 0:
                    r -= min(grid[row][pre_column], number)
                last_row = row + 1
                last_column = column + 1
                if last_row < N:
                    r -= min(grid[last_row][column],number)
                if last_column < N:
                    r -= min(grid[row][last_column], number)
                result += r
        return result
发布了15 篇原创文章 · 获赞 0 · 访问量 233
展开阅读全文

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

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览