883. 三维形体投影面积

121 阅读1分钟

题目:
在 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 {
    count := 0
    m, n := len(grid), len(grid[0])
    maxCols := make([]int, n)
    for i := 0; i < m; i ++ {
        maxRow := 0
        for j := 0; j < n; j ++ {
            if grid[i][j] != 0 {
                count ++
            }
            if grid[i][j] > maxRow {
                maxRow = grid[i][j]
            }
            if grid[i][j] > maxCols[j] {
                maxCols[j] = grid[i][j]
            }
          
        }
        count = count + maxRow 
    }
    
    for i := range maxCols {
        count = count + maxCols[i]
    }

    return count 
}