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

JAVA练习257-三维形体投影面积,第1张

题目概述

在 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;
    }
}

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/740610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存