LeetCode_三维形体投影面积

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

来源:LeetCode-883. 三维形体投影面积


解题思路:

方法:模拟

思路与算法:

这道题中我们需要注意:当俯视图高度为0时,其面积是不算的。

根据题意进行模拟即可,我们使用三个变量来分别统计三视图的阴影面积:

  1. ans1:用来统计俯视图的面积,共有n * n个位置需要被统计,也就是当grid[i][j] > 0时,阴影面积增加一,即ans1++
  2. ans2:用来统计左视图的面积,共有n行需要被统计,也就是说,求出每一行中的最大高度a,然后ans2加上a即可
  3. 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。

业精于勤,荒于嬉;行成于思,毁于随。——韩愈

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值