3D 形狀的投影面積


假設有一個 N x N 網格,我們放置一些與 x、y 和 z 軸對齊的 1 x 1 x 1 立方體。此處每個值 v = grid[i][j] 顯示放置在網格單元格 (i,j) 上方的一個 v 立方體塔。我們從上面、前面和側面檢視這些立方體的投影。在從頂部、正面和側面檢視立方體時,我們必須找出所有三個投影的總面積。

因此,如果輸入類似 [[1,2],[3,4]]

那麼輸出將是 17.

要解決此問題,我們將遵循以下步驟 −

  • xy := 0, yz := 0, xz := 0
  • 對每個行索引 r 和 grid 中的行 row 執行操作
    • yz := yz + 大於行的 row
    • 對於 row 中的每個列索引 c 和列 col 執行操作
      • 如果 grid[r][c] > 0 是非零,則
        • xy := xy + 1
    • 對於 grid 中的每個 col 執行操作
      • xz := xz + 最大 col
  • 返回 xy + yz + xz

讓我們看看以下實現以更好地理解 −

示例

 即時演示

class Solution(object):
   def projectionArea(self, grid):
      xy = 0
      yz = 0
      xz = 0
      for r, row in enumerate(grid):
         yz += max(row)
         for c, col in enumerate(row):
            if grid[r][c] > 0:
               xy += 1
            for col in zip(*grid):
               xz += max(col)
      return xy + yz + xz
ob = Solution()
print(ob.projectionArea([[1,2],[3,4]]))

輸入

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

輸出

17

更新於:2020 年 7 月 4 日

431 次瀏覽

開始您的 職業

透過完成課程獲得認證

開始
廣告
© . All rights reserved.