Python 中 3D 形状的表面积

pythonserver side programmingprogramming更新于 2023/11/9 17:57:00

假设有一个 N x N 网格,我们在其中放置一些 1 x 1 x 1 立方体。现在对于每个值 v = grid[i][j] 表示放置在网格单元 (i, j) 顶部的 v 个立方体塔。我们必须找到结果形状的总表面积。

因此,如果输入为 [[1,2],[3,4]],则输出将为 34。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数 vicinityArea()。这将获取行
  • area := 0
  • 对于范围从 0 到行大小 - 1 的 i,执行
    • 如果 row[i] 和 row[i + 1] 非零,则
      • area := area + 2 * row[i], row[i+1] 的最小值
  • 返回面积
  • 从主方法执行以下操作 −
  • z := 2* (网格中所有行的 (行中值 i 的总和) 的总和)
  • x_plus_y := 网格中所有元素的总和 * 4
  • x_adjacent := 网格中所有行的相邻面积 (行) 的总和
  • y_adjacent := 总和网格中所有列的相邻区域(行)
  • return z +(x_plus_y - x_adjacent - y_adjacent)

让我们看看下面的实现以便更好地理解 −

示例

class Solution:
   def surfaceArea(self, grid):
      def adjacentArea(row):
         area = 0
         for i in range(len(row) - 1):
            if row[i] and row[i + 1]:
               area += 2 * min(row[i], row[i+1])
            return area
      z = sum([sum(i > 0 for i in row) for row in grid]) * 2
      x_plus_y = sum([sum(row) for row in grid]) * 4
      x_adjacent = sum([adjacentArea(row) for row in grid])
      y_adjacent = sum([adjacentArea(row) for row in zip(*grid)])
      return z + (x_plus_y - x_adjacent - y_adjacent)
ob = Solution()
print(ob.surfaceArea([[1,2],[3,4]]))

输入

[[1,2],[3,4]]

输出

34

相关文章