LeetCode简单题之三维形体的表面积
題目
給你一個 n * n 的網(wǎng)格 grid ,上面放置著一些 1 x 1 x 1 的正方體。每個值 v = grid[i][j] 表示 v 個正方體疊放在對應單元格 (i, j) 上。
 放置好正方體后,任何直接相鄰的正方體都會互相粘在一起,形成一些不規(guī)則的三維形體。
 請你返回最終這些形體的總表面積。
 注意:每個形體的底面也需要計入表面積中。
 示例 1:
 
 輸入:grid = [[1,2],[3,4]]
 輸出:34
 示例 2:
 
輸入:grid = [[1,1,1],[1,0,1],[1,1,1]]
 輸出:32
 示例 3:
 
 輸入:grid = [[2,2,2],[2,1,2],[2,2,2]]
 輸出:46
提示:
 n == grid.length
 n == grid[i].length
 1 <= n <= 50
 0 <= grid[i][j] <= 50
 來源:力扣(LeetCode)
解題思路
??題目難度不大但是比較繁瑣,需要考慮許多細節(jié)。對于堆疊的方塊先計算復雜的部分,即堆的比較高的方塊和堆的比較低的方塊兩者緊挨的時候中間露出來的面積;以實例1為例:1號塊和2,3號塊緊挨2號高出1號一塊所以多出來的面積是1,3號高出1號2塊,所以多出來的面積為2,我們只需要計算高塊比低塊多出的部分就可以避免重復計算,所以可以遍歷整個矩陣然后根據(jù)每個元素周圍的情況進行統(tǒng)計復雜面積。剩下的只需要加一個底面積和頂面積,側面積,而這些面積都是比較好統(tǒng)計的。
class Solution:def surfaceArea(self, grid: List[List[int]]) -> int:n=len(grid)count=0for i in range(n):for j in range(n):if i-1>=0:  #統(tǒng)計復雜部分面積if grid[i][j]-grid[i-1][j]>0:count+=grid[i][j]-grid[i-1][j]if i+1<n:if grid[i][j]-grid[i+1][j]>0:count+=grid[i][j]-grid[i+1][j]if j-1>=0:if grid[i][j]-grid[i][j-1]>0:count+=grid[i][j]-grid[i][j-1]if j+1<n:if grid[i][j]-grid[i][j+1]>0:count+=grid[i][j]-grid[i][j+1]if grid[i][j]>0:  #統(tǒng)計底面積和頂面積count+=2count+=sum(grid[0])  #統(tǒng)計側面積count+=sum(grid[-1])count+=sum([i[0] for i in grid])count+=sum([i[-1] for i in grid])return count
總結
以上是生活随笔為你收集整理的LeetCode简单题之三维形体的表面积的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: LeetCode简单题之Excel 表中
- 下一篇: LeetCode中等题之二倍数对数组
