利用矩阵在三维空间的投影性质:求解《883. 三维形体投影面积》

2022-04-26 02:00:47

利用矩阵在三维空间的投影性质,求解《883. 三维形体投影面积》

以矩阵 [[1,2],[3,4]] 为例,展示矩阵在三维空间,各平面的投影面积情况

三维空间的投影

例题

883. 三维形体投影面积

在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。 现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。 投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。 返回 所有三个投影的总面积 。

答案

var projectionArea = function(grid) {
  const n = grid.length
  let xy = xz = yz = 0
  for (let i = 0; i < n; i++) {
    let maxX = maxY = 0
    for (let j = 0; j < n; j++) {
      maxY = Math.max(maxY, grid[j][i])
      if (grid[i][j] === 0) continue
      xy++
      maxX = Math.max(maxX, grid[i][j])
    }
    xz += maxX
    yz += maxY
  }
  return xy + xz + yz
};
func projectionArea(grid [][]int) int {
  xy, xz, yz := 0, 0, 0
  for i, t := range grid {
    maxX, maxY := 0, 0
    for j, v := range t {
      maxY = max(maxY, grid[j][i])
      if v == 0 {
        continue
      }
      xy++
      maxX = max(maxX, v)
    }
    xz += maxX
    yz += maxY
  }
  return xy + xz + yz
}
func max(a int, b int) int {
  if a > b {
    return a
  }
  return b
}
class Solution {
    function projectionArea($grid) {
      $xy = $xz = $yz = 0;
      foreach($grid as $i => $t) {
        $maxX = $maxY = 0;
        foreach($t as $j => $v) {
          $maxY = max($maxY, $grid[$j][$i]);
          if ($v === 0) continue;
          $maxX = max($maxX, $v);
          $xy++;
        }
        $xz += $maxX;
        $yz += $maxY;
      }
      return $xy + $xz + $yz;
    }
}
二维前缀和:求解《303. 区域和检索 - 数组不可变》《304. 二维区域和检索 - 矩阵不可变》《427. 建立四叉树》
前缀和,二维前缀和,求数组的区间和、矩阵指定区域面积,并建立四叉树。求解《303. 区域和检索 - 数组不可变》《304. 二维区域和检索 - 矩阵不可变》《427. 建立四叉树》