LeetCode 887. 三维形体投影面积
发布日期:2021-06-30 15:30:44 浏览次数:2 分类:技术文章

本文共 1648 字,大约阅读时间需要 5 分钟。

887. 三维形体投影面积

在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。

每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。

现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影

投影就像影子,将三维形体映射到一个二维平面上。

在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。

返回所有三个投影的总面积。

 

示例 1:

输入:[[2]]输出:5

示例 2:

输入:[[1,2],[3,4]]输出:17解释:这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。

示例 3:

输入:[[1,0],[0,2]]输出:8

示例 4:

输入:[[1,1,1],[1,0,1],[1,1,1]]输出:14

示例 5:

输入:[[2,2,2],[2,1,2],[2,2,2]]输出:21

提示:

  • 1 <= grid.length = grid[0].length <= 50
  • 0 <= grid[i][j] <= 50

大致思路:

     i表示x行,j表示y行,输入的gird[i][j]表示z

     因此,

     xy上的阴影:就是只要gird[i][j]不为0,就在xy上占一格

     xz上的阴影:  表示不管y,取同一个x时(i)最高的那一列,意思是取每一行最大的数,然后加起来

      yz上的阴影: 表示不管x,取同一个y时(j)最高的那一列,意思是取每一列最大的数,然后加起来

     由于我对vector了解不多,所以这里的代码特别弱智,仅供参考

代码:

class Solution {public:    int xy(vector
>& grid) { int xy=0; for(int i=0;i
& vec) { int max =0; for (auto v : vec) { if (max < v) max = v; } return max;} int xz(vector
>& grid) { int sum=0; for(int i=0;i
>& grid) { int sum=0; int size=0; for(int i=0;i
size) size=grid[i].size(); } int yzmax[size]; for(int i=0;i
maxi) { maxi=grid[j][i]; } } sum+=maxi; } return sum; } int projectionArea(vector
>& grid) { int sum; sum=xy(grid)+xz(grid)+yz(grid); return sum; }};

 

大佬的代码(来自tonygsw) 

class Solution {public:    int projectionArea(vector
>& grid) { int hans=0,lans=0,rans=0; for(int i=0;i
0)hans++; maxl=max(maxl,grid[i][j]); maxr=max(maxr,grid[j][i]); } lans+=maxl;rans+=maxr; } return lans+rans+hans; }};

 

转载地址:https://joycez.blog.csdn.net/article/details/81428420 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:POJ 2965
下一篇:LeetCode 868. 二进制间距

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月12日 03时08分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章