Python 中 3D 形状的表面积
pythonserver side programmingprogramming更新于 2023/11/9 17:57:00
假设有一个 N x N 网格,我们在其中放置一些 1 x 1 x 1 立方体。现在对于每个值 v = grid[i][j] 表示放置在网格单元 (i, j) 顶部的 v 个立方体塔。我们必须找到结果形状的总表面积。
因此,如果输入为 [[1,2],[3,4]],则输出将为 34。
为了解决这个问题,我们将遵循以下步骤 −
- 定义一个函数 vicinityArea()。这将获取行
- area := 0
- 对于范围从 0 到行大小 - 1 的 i,执行
- 如果 row[i] 和 row[i + 1] 非零,则
- area := area + 2 * row[i], row[i+1] 的最小值
- 如果 row[i] 和 row[i + 1] 非零,则
- 返回面积
- 从主方法执行以下操作 −
- z := 2* (网格中所有行的 (行中值 i 的总和) 的总和)
- x_plus_y := 网格中所有元素的总和 * 4
- x_adjacent := 网格中所有行的相邻面积 (行) 的总和
- y_adjacent := 总和网格中所有列的相邻区域(行)
- return z +(x_plus_y - x_adjacent - y_adjacent)
让我们看看下面的实现以便更好地理解 −
示例
class Solution: def surfaceArea(self, grid): def adjacentArea(row): area = 0 for i in range(len(row) - 1): if row[i] and row[i + 1]: area += 2 * min(row[i], row[i+1]) return area z = sum([sum(i > 0 for i in row) for row in grid]) * 2 x_plus_y = sum([sum(row) for row in grid]) * 4 x_adjacent = sum([adjacentArea(row) for row in grid]) y_adjacent = sum([adjacentArea(row) for row in zip(*grid)]) return z + (x_plus_y - x_adjacent - y_adjacent) ob = Solution() print(ob.surfaceArea([[1,2],[3,4]]))
输入
[[1,2],[3,4]]
输出
34