Leetcode 887 Projection Area of 3D Shapes

On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes.

Each value v = grid[i][j] represents a tower of v cubes placed on top of grid cell (i, j).

Now we view the projection of these cubes onto the xy, yz, and zx planes.

A projection is like a shadow, that maps our 3 dimensional figure to a 2 dimensional plane.

Here, we are viewing the “shadow” when looking at the cubes from the top, the front, and the side.

Return the total area of all three projections.


Note:

  1. 1 <= grid.length = grid[0].length <= 50
  2. 0 <= grid[i][j] <= 50

分析:

  1. 这道题就是高中所学的正视图、侧视图、俯视图
  2. 对于正视图,也就是从x轴方向看,我们看到的就是沿y轴方向的一系列最高的柱子
  3. 对于侧视图,也就是从y轴方向看,我们看到的就是沿x轴方向的一系列最高的柱子
  4. 对于俯视图,所有的柱子都是1,因为底面积是1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution(object):
def projectionArea(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
if not grid or not grid[0]: return 0
res = 0
m,n = len(grid),len(grid[0])
# 俯视图的所有柱子,包括了0,等下需要减去
res += m*n
# 侧视图的最高
for row in grid:
res += max(row)
# 减去俯视图里多计算的0的数量
res -= row.count(0)
# 正视图的最高
for row in zip(*grid):
res += max(row)
return res