1. 程式人生 > >883. 三維形體投影面積

883. 三維形體投影面積

在 N * N 的網格中,我們放置了一些與 x,y,z 三軸對齊的 1 * 1 * 1 立方體。

每個值 v = grid[i][j] 表示 v 個正方體疊放在單元格 (i, j) 上。

現在,我們檢視這些立方體在 xy、yz 和 zx 平面上的投影

投影就像影子,將三維形體對映到一個二維平面上。

在這裡,從頂部、前面和側面看立方體時,我們會看到“影子”。

返回所有三個投影的總面積。

示例 1:

輸入:[[2]]
輸出:5

示例 2:

輸入:[[1,2],[3,4]]
輸出:17
解釋:
這裡有該形體在三個軸對齊平面上的三個投影(“陰影部分”)。

示例 3:

輸入:
[[1,0],[0,2]] 輸出:8

示例 4:

輸入:[[1,1,1],[1,0,1],[1,1,1]]
輸出:14

示例 5:

輸入:[[2,2,2],[2,1,2],[2,2,2]]
輸出:21

提示:

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

解答如下:

class Solution {
public:
    int projectionArea(vector<vector<int>>& grid) {
        int row=grid.size();
        long result=0;
        for(int i=0;i<row;i++){
           int maxa=grid[i][0];
           int maxb=grid[0][i];
           for(int j=0;j<row;j++){
               //俯視面積
               if(grid[i][j]!=0)
                   result++;
               //正側兩面
               maxa=max(grid[i][j],maxa);
               maxb=max(maxb,grid[j][i]);
           }
           result+=maxa+maxb;
        }  
        return result;
    }
};