LeetCode每日一题(10)——三维形体投影面积(保姆级)

简介: 三维形体投影面积1.题目2.示例3.思路理解题目解题思路4.代码

1.题目


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


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


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


投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。


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


2.示例


示例 1:


58c12400ad18433cb84ce428f909a6a1.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


3.思路


理解题目


首先要理解题目所描述的内容是什么,结合示例我做下简单的解释,自己已经理解题目说的什么意思可以直接去看代码。

题目说给你一个立体图形,让你求他的正视图,左视图,俯视图面积的和。

关于这个立体图形的组成,由一些边长是1的小正方体堆成,放在一个方形区域内。

正方形区域是由一个二维数组组成的,这个二维数组的行数和列数一样,二维数组有几个数字,就有几个位置可以放小正方形,所以小正方形放的范围一定在一个大正方形的范围里。当然小正方形上面可以摞上更多的小正方形。

每一个数组中的数字的位置上放的小正方形的数量=这个数字

示例1的图很清楚,

示例2的意思是在一个1*1的数组上放2个小正方形,正视图2+左视图2+俯视图1=5

示例三的意思是在(0,0)放1个,在(2,2)放两个,正视图3+左视图3+俯视图2=8


解题思路


对于正视图和左视图,算面积都该用每一列的最大高度去算。

用双重for循环遍历数组,统计出左视图和正视图的每一列最高是多少,每一列的面积相加,最后加上俯视图面积即可。

俯视图最简单,数组的哪个位置放了方块,不管几个都只能看到一个,所以有几个数字不为0,俯视图的面积就是几。

求左视图的和正视图的请自行结合代码理解


4.代码


func projectionArea(grid [][]int) int {
  //总面积
  var area int
  //左视图一列的最大高度
  var maxLeft int
  //正视图每一列的最大高度
  var maxFront []int
  //遍历二维数组
  for k1, v1 := range grid{
    for k2, v2 := range v1{
      if grid[k1][k2] > maxLeft {
        maxLeft = v2
      }
      //找到正视图每一列的最大高度
      if k1 == 0 {
        maxFront = append(maxFront, v2)
      }
      if grid[k1][k2] > maxFront[k2] {
        maxFront[k2] = grid[k1][k2]
      }
      //加上俯视图面积
      if v2 != 0 {
        area = area + 1 * 1
        log.Println("附视图面积+1")
      }
    }
    //加上左视图面积
    area = area + maxLeft * 1
    log.Printf("左视图面积+%v", maxLeft)
    maxLeft = 0
  }
  //加上正视图面积
  for _, h := range maxFront {
    area = area + h * 1
    log.Printf("正视图面积+%v", h)
  }
  return area
}
相关文章
|
6月前
|
存储
leetcode2975. 移除栅栏得到的正方形田地的最大面积
leetcode2975. 移除栅栏得到的正方形田地的最大面积
44 1
|
6月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 223. 矩形面积 算法解析
☆打卡算法☆LeetCode 223. 矩形面积 算法解析
LeetCode 223. 矩形面积
LeetCode 223. 矩形面积
68 0
|
6月前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
72 0
|
6月前
leetcode-695:岛屿的最大面积
leetcode-695:岛屿的最大面积
54 0
leetcode 695 岛屿的最大面积
leetcode 695 岛屿的最大面积
67 0
leetcode 695 岛屿的最大面积
|
算法
LeetCode——883. 三维形体投影面积
LeetCode——883. 三维形体投影面积
109 0
LeetCode——883. 三维形体投影面积
LeetCode每日一题(23)——最大三角形面积
最大三角形面积 1.题目 2.示例 3.思路 4.代码 暴力穷举 凸包
100 0
LeetCode每日一题(23)——最大三角形面积
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2