在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。
现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。
投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。
返回 所有三个投影的总面积 。
示例 1:输入:[[1,2],[3,4]]
输出:17
解释:这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。
输入:grid = [[2]]
输出:5
输入:[[1,0],[0,2]]
输出:8
- n == grid.length == grid[i].length
- 1 <= n <= 50
- 0 <= grid[i][j] <= 50
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/projection-area-of-3d-shapes
结果分为三个部分,即俯视图,正视图,侧视图,因此我们可以根据这三种情况进行模拟:
- 俯视图:即统计每个立方体个数不为 0 的方格的数量
- 正视图:我们看到的只有 x 轴方向最高的立方体,记录每个 x 轴方向最大值之和即可
- 侧视图:和正视图同理,记录 y 轴方向最大值之和即可
时间复杂度:O(n^2)
空间复杂度:O(1)
class Solution {
public int projectionArea(int[][] grid) {
int n = grid.length;
// 俯视图的最大值,x y 轴的最大值之和
int maxTop = 0, maxX = 0, maxY = 0;
for(int i = 0; i < n; ++i){
// 分别记录 x y 的最大值
int x = 0, y = 0;
for(int j = 0; j < n; ++j){
x = Math.max(x, grid[j][i]);
y = Math.max(y, grid[i][j]);
maxTop += grid[i][j] > 0 ? 1: 0;
}
maxX += x;
maxY += y;
}
return maxTop + maxX + maxY;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)