↓快轉到主要內容
  1. LeetCode/

LeetCode 883: Projection Area of 3D Shapes

·1 分鐘· ·
LeetCode Easy Array Math Geometry Matrix
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-09-21

  • 提交紀錄:Runtime Error ×4 → Wrong Answer ×2 → Accepted

解題思路
#

三個方向的投影面積(Matrix 模板三):

  • 從上面看:每個 grid[i][j] > 0 的格子貢獻 1。
  • 從前面看:每一欄最高的那個。
  • 從側面看:每一列最高的那個。

我的嘗試
#

前幾次是變數和型別的 RE。接著兩版把所有數字接成字串、數字元 '0' 的個數來扣掉空的格子,但只要有空格,10、20 這種數裡的 '0' 也會被數進去:[[0, 10]] 答案 21,回傳 20。改成 grid[i][j] > 0 才 AC。

正確解法
#

class Solution:
    def projectionArea(self, grid: List[List[int]]) -> int:
        top = sum(v > 0 for row in grid for v in row)
        side = sum(max(row) for row in grid)
        front = sum(max(col) for col in zip(*grid))
        return top + side + front

複雜度
#

時間 O(n²),空間 O(1)。

要特別避免的錯誤
#

  • 俯視要數非 0 的格子,不能用字串數字元 '0'。

面試口說整理
#

俯視面積是非 0 的格子數,正視和側視分別是每一欄和每一列的最大值加總,三個加起來。時間 O(n²)。

相關文章

LeetCode 812: Largest Triangle Area
·1 分鐘
LeetCode Easy Array Math Geometry Polygons
LeetCode 812 解題筆記:點最多 50 個,枚舉所有三點組合,用鞋帶公式算面積取最大
LeetCode 867: Transpose Matrix
·1 分鐘
LeetCode Easy Array Matrix Simulation
LeetCode 867 解題筆記:轉置後的大小是 n × m,res[j][i] = matrix[i][j];Python 可以用 zip(*matrix)
LeetCode 832: Flipping an Image
·1 分鐘
LeetCode Easy Array Two-Pointers Bit-Manipulation Matrix
LeetCode 832 解題筆記:每一列先左右反轉再把 0、1 互換;可以用左右指針同時做
LeetCode 836: Rectangle Overlap
·1 分鐘
LeetCode Easy Math Geometry
LeetCode 836 解題筆記:兩個矩形重疊等價於 x 方向和 y 方向的區間都重疊,min(右邊) > max(左邊)
LeetCode 766: Toeplitz Matrix
·1 分鐘
LeetCode Easy Array Matrix
LeetCode 766 解題筆記:同一條對角線的元素都相同,等價於每一格都等於左上角那格
LeetCode 733: Flood Fill
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 733 解題筆記:從起點 DFS / BFS,四個方向上跟起點原本顏色相同的格子都換成新顏色;新舊顏色相同時直接回傳