栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA练习257-三维形体投影面积

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA练习257-三维形体投影面积

题目概述

在 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)
链接:https://leetcode-cn.com/problems/projection-area-of-3d-shapes

解题分析 方法:模拟

结果分为三个部分,即俯视图,正视图,侧视图,因此我们可以根据这三种情况进行模拟:

  1. 俯视图:即统计每个立方体个数不为 0 的方格的数量
  2. 正视图:我们看到的只有 x 轴方向最高的立方体,记录每个 x 轴方向最大值之和即可
  3. 侧视图:和正视图同理,记录 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;
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836852.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号