利用矩阵在三维空间的投影性质,求解《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;
}
}