【LeetCode】- Projection Area of 3D Shapes(图形的三视图)

1、题目描述

On a N * N grid, we place some 1 * 1 * 1cubes 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.

Example 1:
Input: [[2]]
Output: 5

Example 2:
Input: [[1,2],[3,4]]
Output: 17
Explanation:
Here are the three projections (“shadows”) of the shape made with each axis-aligned plane.

《【LeetCode】- Projection Area of 3D Shapes(图形的三视图)》

Example 3:
Input: [[1,0],[0,2]]
Output: 8

Example 4:
Input: [[1,1,1],[1,0,1],[1,1,1]]
Output: 14

Example 5:
Input: [[2,2,2],[2,1,2],[2,2,2]]
Output: 21

Note:

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

2、问题描述:

  • 就是一个简单的就一个3维图像的三视图的面积。

3、问题关键:

  • 俯视图,左视图,右视图。
  • 俯视图——坐标不为零的俯视图面积都为1。
  • 左视图——行最大值,固定住行,遍历一遍列。
  • 右视图——列最大值,固定住列,遍历一遍行。

4、C++代码:

class Solution {
public:
    int projectionArea(vector<vector<int>>& grid) {
        if (grid.empty()) return 0;
        int n = grid.size(), m = grid[0].size();
        int res = 0;
        for(int i = 0; i < n; i ++ ) 
            for (int j = 0; j < m; j ++ )
                if (grid[i][j]) res += 1;//遍历每个点,如果不为零俯视图面积为1.
        for (int i = 0; i < n; i ++) {
            int h = 0;
            for (int j = 0; j < m; j++)
                h = max(h, grid[i][j]);//左视图,固定住行,遍历一遍列,求最大值,即为面积。
            res += h;
        }
        for (int j = 0; j < m; j ++){
            int h = 0;
            for (int i = 0; i < n; i++)
                h = max(h, grid[i][j]);//固定住列,遍历每一行,求最大值即为右视图面积。
            res += h;
        }
        return res;
    }
};
    原文作者:邓泽军_3679
    原文地址: https://www.jianshu.com/p/a2c967b9a19f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞