LeetCode_三维形体投影面积【简单】
正题:
题目:
在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。
现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。
投影 就像影子,将三维形体映射到一个二维平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。
返回+所有三个投影的总面积 。
示例一:
输入:[[1,2],[3,4]]
输出:17
解释:这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。
示例二:
输入:[[1,0],[0,2]]
输出:8
解题思路:
方法:模拟
思路与算法:
这道题中我们需要注意:当俯视图高度为0时,其面积是不算的。
根据题意进行模拟即可,我们使用三个变量来分别统计三视图的阴影面积:
- ans1:用来统计俯视图的面积,共有n * n个位置需要被统计,也就是当grid[i][j] > 0时,阴影面积增加一,即ans1++;
- ans2:用来统计左视图的面积,共有n行需要被统计,也就是说,求出每一行中的最大高度a,然后ans2加上a即可;
- ans3:用来统计主视图的面积,共有n列需要被统计,也就是说,求出每一列中的最大高度b,然后ans3加上b即可。
代码如下(示例):
class Solution {
public int projectionArea(int[][] grid) {
int ans1 = 0, ans2 = 0, ans3 = 0;
int n = grid.length;
for (int i = 0;i < n;i++){
int a = 0, b = 0;
for (int j = 0;j < n;j++){
if(grid[i][j] > 0) ans1++;
a = Math.max(a, grid[i][j]);
b = Math.max(b, grid[j][i]);
}
ans2 += a;
ans3 += b;
}
return ans1 + ans2 + ans3;
}
}
执行用时:
- 执行用时: 2 ms;
- 内存消耗: 40.8 MB。
业精于勤,荒于嬉;行成于思,毁于随。——韩愈