892. 三維形體的表面積

解題思路

這題主要還是考驗空間想象能力吧。起初是想用投影法做的,但發現如果形體中間有洞的話則不行。所以還是用每個立方體的表面積總和減去和周圍立方體重疊的面積來算。
總體思路就是總表面積 = 立方體數 * 6 - 重疊面 * 2,重疊面又可以分爲三部分:(1)每個格子內的垂直方向上的立方體底/頂面重疊;(2)左右格子之間的立方體的側面重疊;(3)前後格子之間的立方體的側面重疊。最後注意一下邊界條件就行。

複雜度分析:
時間複雜度:O(N^2),其中 N 是 grid 中的行和列的數目。
空間複雜度:O(1)。

代碼

class Solution:
    def surfaceArea(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])
        s = 0
        a, b, c= 0, 0, 0
        for i in range(m):
            for j in range(n):
                if grid[i][j] !=0:
                    s += grid[i][j]
                    c += 2*(grid[i][j]-1) # 考慮上下重疊的情況
                if i+1<m:
                    b += 2*min(grid[i][j], grid[i+1][j]) # 考慮左右重疊的情況
                if j+1<n:
                    a += 2*min(grid[i][j], grid[i][j+1]) # 考慮前後重疊的情況
        res = 6*s-(a+b+c)
        return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章