LeetCode 0883「三维形体投影面积」
【摘要】 投影就像影子,将三维形体映射到一个二维平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。返回所有三个投影的总面积 。
我是陈皮,一个在互联网 Coding 的 ITer,个人微信公众号「陈皮的JavaLib」关注第一时间阅读最新技术文章。
题目
在 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
- 解释:这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。
示例2:
- 输入:grid = [[2]]
- 输出:5
示例3:
- 输入:[[1,0],[0,2]]
- 输出:8
提示:
- n == grid.length == grid[i].length
- 1 <= n <= 50
- 0 <= grid[i][j] <= 50
题目来源:LeetCode
分析
其实就是要计算三个投影面的总面积。对于水平面(xy面),只要对每一个位置(元素)叠放的方块不为空就会留下阴影,即面积+1。
对于正面(yz面),对每一行y方向,取最高的作为每一行正面的投影面积,全部y方向的行的总投影,即为正面的投影面积。
对于测面(xz面),对每一行x方向,取最高的作为每一行侧面的投影面积,全部x方向的行的总投影,即为侧面的投影面积。
实现
package com.chenpi.no0883ProjectionArea;
/**
* @author 陈皮
* @version 1.0
* @description
* @date 2022/4/26
*/
public class No0883ProjectionArea {
public static void main(String[] args) {
No0883ProjectionArea inst = new No0883ProjectionArea();
// int[][] grid = {{1, 2}, {3, 4}};
int[][] grid = {{2}};
// int[][] grid = {{1, 0}, {0, 2}};
System.out.println(inst.projectionArea(grid));
}
public int projectionArea(int[][] grid) {
int area = 0;
for (int i = 0; i < grid.length; i++) {
int xMax = 0;
int yMax = 0;
for (int j = 0; j < grid[i].length; j++) {
// 计算水平面(xy)的阴影,只要在此位置叠放的方块不为空就会留下阴影
area += grid[i][j] > 0 ? 1 : 0;
// 对每一行y方向,取最高的作为侧面的投影面积
xMax = Math.max(xMax, grid[i][j]);
// 对每一行x方向,取最高的作为正面的投影面积
yMax = Math.max(yMax, grid[j][i]);
}
area += xMax;
area += yMax;
}
return area;
}
}
// 输出结果如下
5
Leetcode 执行结果:
本次分享到此结束啦~~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,您的支持就是我创作最大的动力!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)