题目
方法:数学
- x y xy xy 平面的投影面积等于网格上非零数值的数目
- yz \texttt{yz} yz 平面的投影面积等于网格上每一列最大数值之和
- zx \texttt{zx} zx 平面的投影面积等于网格上每一行最大数值之和
返回上述三个投影面积之和。
class Solution {
public int projectionArea(int[][] grid) {
int n = grid.length;
if (n == 1) {
return grid[0][0] == 0 ? 0 : 1 + 2 * grid[0][0];
}
int xy = 0, yz = 0, zx = 0;
for (int i = 0; i < n; i++) {
int yzHeight = 0 ;
int zxHeight = 0;
for (int j = 0; j < n; j++) {
if (grid[i][j] != 0) {
xy++;
}
zxHeight = Math.max(zxHeight, grid[i][j]);
yzHeight = Math.max(yzHeight, grid[j][i]);
}
zx += zxHeight;
yz += yzHeight;
}
return xy + yz + zx;
}
}
- 时间复杂度: O ( n 2 ) O(n^2) O(n2),其中 n n n 是网格的行数或列数(本题行数等于列数)
- 空间复杂度: O ( 1 ) O(1) O(1)