【我也想刷穿 LeetCode啊】883. 三维形体投影面积

60 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

现在前端很多岗位面试需要有一定的算法基础,或者说经常刷算法的会优先考虑。

因此每天刷刷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:

图片.png

输入:[[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) 链接:leetcode.cn/problems/pr… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析

 本题非常直白, 就是对给定的 "三位图形" 求 XY, XZ, YZ 三个平面的面积合 以 grid = [[1,2],[3,4]] 为例 我们可以将其看作如下一个二维矩阵    1   3    2   4

对于 XY 平面而言只要统计 二维矩阵中不为 0 的位置数量 (此处为 4) 对于 XZ 平面而言, 其面积为每一列中的最大值合(第 1 列为 2, 第二列为 4, 合为 6 ) 对于 YZ 平面而言, 其面积为每一行中的最大值合 (第 1 行为 3, 第二行为 4, 合为 7 ) 所以返回的答案为    sumXY + sumXZ + sumYZ = 6 + 7 + 4 = 17

三、代码实现

/**
 * @param {number[][]} grid
 * @return {number}
 */
var projectionArea = function(grid) {
  // arr 收集每行数据最大值
  let sumXY, sumXZ, sumYZ, arr = []
  sumXY = sumXZ = sumYZ = 0
  for(let i = 0, len = grid.length;i < len;i++) {
    let col = grid[i]
    let max = 0 // 用于记录单列最大值
    for(let j = 0, l = col.length;j < l;j++) {
      if(col[j] != 0) sumXY++
      max = Math.max(col[j], max)
      if(arr[j])
        arr[j] = Math.max(arr[j], col[j])
      else
        arr[j] = col[j]
    }
    sumXZ += max
  }
  sumYZ = arr.reduce((total, current)=> {
    return total += current
  }, sumYZ)
  return sumXY + sumXZ + sumYZ
};

四、总结

以上就是本道题的所有内容了,本系列会持续更,欢迎点赞、关注、收藏,另外如有其他的问题,欢迎下方留言给我,我会第一时间回复你,感谢~