LeetCode 0883「三维形体投影面积」

该博客解析了LeetCode第883题的解决方案,内容涉及计算三维立方体在xy、yz和zx平面上的投影面积。通过遍历矩阵并计算每个投影面的最大高度,得到三个投影的总面积。示例展示了不同输入下的输出结果,并提供了Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

题目

在 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 执行结果:

在这里插入图片描述


本次分享到此结束啦~~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,您的支持就是我创作最大的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈皮的JavaLib

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值