LeetCode 892 三維形體的表面積

2021-10-04 09:26:31 字數 1628 閱讀 2695

表面積=頂面積+底面積+側面積

只要單元格內有正方體,它就貢獻出底面+表面

即v>0,等於表面積+2

側面積用v跟相鄰單元格的v比較,若v>相鄰單元格v2,則側面積+v-v2,反之+0

單元格grid[i][j]的相鄰單元格為grid[i-1][j],grid[i+1][j],grid[i][j+1],grid[i][j-1],

如果算出的單元格溢位三維體的邊界,將它的值看為0,判斷條件為0<=i±1class

solution

:def

su***cearea

(self, grid: list[list[

int]])

->

int:

s =0 l =

len(grid)

for i in

range

(l):

for j in

range

(l):

v = grid[i]

[j]if v >0:

s +=

2for m,n in

((i+

1,j)

,(i-

1,j)

,(i,j+1)

,(i,j-1)

):if0

<=m

0<=n

v2 = grid[m]

[n]else

: v2 =

0 s +=

max(v-v2,0)

return s先計算每個單元格內的三維柱體的表面積,相加得出s

總s_總

s總​計算出重合的側面面積s

側s_側

s側​相減即是三維柱體表面積

class
solution

:def

su***cearea

(self, grid: list[list[

int]])

->

int:

s1 =

0#總面積

s2 =

0#重合面積

l =len(grid)

for i in

range

(l):

for j in

range

(l):

v = grid[i]

[j]if v==0:

s =0else

: s =2+

4*vs1 += s

if i+

1v2 = grid[i+1]

[j] s =

min(v,v2)

s2 += s*

2if j+

1v2 = grid[i]

[j+1

] s =

min(v,v2)

s2 += s*

2return s1-s2

LeetCode892 三維形體的表面積

題目描述 在 n n 的網格上,我們放置一些 1 1 1 的立方體。每個值 v grid i j 表示 v 個正方體疊放在對應單元格 i,j 上。請你返回最終形體的表面積。示例 1 輸入 2 輸出 10 示例 2 輸入 1,2 3,4 輸出 34 示例 3 輸入 1,0 0,2 輸出 16 示例 4...

LeetCode 892 三維形體的表面積

892.三維形體的表面積 在 n n 的網格上,我們放置一些 1 1 1 的立方體。每個值 v grid i j 表示 v 個正方體疊放在對應單元格 i,j 上。請你返回最終形體的表面積。示例 1 輸入 2 輸出 10 示例 2 輸入 1,2 3,4 輸出 34 示例 3 輸入 1,0 0,2 輸出...

LeetCode892 三維形體的表面積c

在n n的網格上,我們放置一些1 1 1的立方體。每個值v grid i j 表示v個正方體疊放在單元格 i,j 上。返回結果形體的總表面積。示例 1 輸入 2 輸出 10示例 2 輸入 1,2 3,4 輸出 34示例 3 輸入 1,0 0,2 輸出 16示例 4 輸入 1,1,1 1,0,1 1,...