主題

LeetCode - 892. Surface Area of 3D Shapes 解題心得

Not In My Back Yard | 2021-02-06 00:00:11

題目連結:


題目意譯:
給定你一個 n × n 個網格 grid,在其中你可以放置一些 1 × 1 × 1 的方塊。每個值 v = grid[i][j] 代表放置於 (i, j) 的方塊塔之高度。

放置完方塊後,你決定將任兩個相鄰之方塊黏在一起,形成一些不規則三維圖形。

回傳該圖形的總表面積。

注: 圖形的底部面也算在表面積裡。

限制:
n == grid.length
n == grid[i].length
1 ≦ n <= 50
0 ≦ grid[i][j] ≦ 50



範例測資:
範例 1:
輸入: grid = [[2]]
輸出: 10

範例 2:
輸入: grid = [[1,2],[3,4]]
輸出: 34

範例 3:
輸入: grid = [[1,0],[0,2]]
輸出: 16

範例 4:
輸入: grid = [[1,1,1],[1,0,1],[1,1,1]]
輸出: 32

範例 5:
輸入: grid = [[2,2,2],[2,1,2],[2,2,2]]
輸出: 46


解題思維:
對於某座塔 grid[i][j] ,如果 grid[i][j] > 0 代表 (i, j) 有放方塊,因此一定有頂部、底部這兩個 1 × 1 之面積。

接著看這座塔的上下左右(即相鄰的塔,這邊用 G 指稱,如果 G 不存在(位置 (i, j) 位於邊緣等等),則預設為高度 0 的塔),看 grid[i][j] 與 G 之關係:
如果 grid[i][j] > G ,則代表位於 (i, j) 的這座塔會於與塔 G 相鄰的這一側露出 grid[i][j] - G 單位之面積;反之,則不會露出任何面積(因為會黏於塔 G 上)。

對於 grid 中每座塔將上述的值全數加總即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。
32 巴幣: 0

創作回應

相關創作

更多創作