3D 形状的投影面积
假设有一个 N x N 网格,我们放置一些与 x、y 和 z 轴对齐的 1 x 1 x 1 立方体。此处每个值 v = grid[i][j] 显示放置在网格单元格 (i,j) 上方的一个 v 立方体塔。我们从上面、前面和侧面查看这些立方体的投影。在从顶部、正面和侧面查看立方体时,我们必须找出所有三个投影的总面积。
因此,如果输入类似 [[1,2],[3,4]]
那么输出将是 17.
要解决此问题,我们将遵循以下步骤 −
- xy := 0, yz := 0, xz := 0
- 对每个行索引 r 和 grid 中的行 row 执行操作
- yz := yz + 大于行的 row
- 对于 row 中的每个列索引 c 和列 col 执行操作
- 如果 grid[r][c] > 0 是非零,则
- xy := xy + 1
- 如果 grid[r][c] > 0 是非零,则
- 对于 grid 中的每个 col 执行操作
- xz := xz + 最大 col
- 返回 xy + yz + xz
让我们看看以下实现以更好地理解 −
示例
class Solution(object): def projectionArea(self, grid): xy = 0 yz = 0 xz = 0 for r, row in enumerate(grid): yz += max(row) for c, col in enumerate(row): if grid[r][c] > 0: xy += 1 for col in zip(*grid): xz += max(col) return xy + yz + xz ob = Solution() print(ob.projectionArea([[1,2],[3,4]]))
输入
[[1,2],[3,4]]
输出
17
广告