883. 三维形体投影面积
题目描述
在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。
现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。
投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。
返回 所有三个投影的总面积 。
思路
正视图:每一行最大值之和;
侧视图:每一列最大值之和;
俯视图:柱子个数;
题解
func projectionArea(grid [][]int) int { n := len(grid) xoyProjectionArea, yozProjectionArea, xozProjectionArea := 0, 0, 0 for i := 0; i < n; i++ { rowMax, colMax := math.MinInt64, math.MinInt64 for j := 0; j < n; j++ { if len(grid)>i { if len(grid[i])>j { // 俯视图: 柱子数 if grid[i][j] != 0 { xoyProjectionArea++ } rowMax = max(rowMax, grid[i][j]) } } if len(grid)>j { if len(grid[j])>i { colMax = max(colMax, grid[j][i]) } } } // 侧视图: 每一列的最大值之和 yozProjectionArea += rowMax // 正视图: 每一行的最大值之和 xozProjectionArea += colMax } return xozProjectionArea + xoyProjectionArea + yozProjectionArea } func max(a, b int) int { if a > b { return a } return b }
提交结果