- 题目描述
- 思路
- 数学
- Java实现
- Python实现
题目描述
三维形体投影面积
思路 数学
根据题意,x轴对应行,y轴对应列,z轴对应网格的数值,即二维数组的各个值。
所以,xy平面的投影面积等于网格上非零数值的数目,xz平面的投影面积等于网格上每行最大数值之和,yz平面的投影面积等于网格上每列最大数值之和。
class Solution {
public int projectionArea(int[][] grid) {
int n = grid.length, xy = 0, xz = 0, yz = 0;
for (int i = 0; i < n; i++) {
int yzHeight = 0, xzHeight = 0;
for (int j = 0; j < n; j++) {
xy += grid[i][j] > 0 ? 1 : 0;
yzHeight = Math.max(yzHeight, grid[j][i]);
xzHeight = Math.max(xzHeight, grid[i][j]);
}
yz += yzHeight;
xz += xzHeight;
}
return xy + yz + xz;
}
}
Python实现
class Solution:
def projectionArea(self, grid: List[List[int]]) -> int:
xyArea = sum(v > 0 for row in grid for v in row)
yzArea = sum(map(max, zip(*grid))) # 注意这里为 O(n) 空间复杂度,改为下标枚举则可以 O(1)
zxArea = sum(map(max, grid))
return xyArea + yzArea + zxArea
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)