python计算长方体的表面积_892.leetcode题目讲解(Python):三维形体的表面积(Surface Area of 3D Shapes)...

题目

题目

解题思路

解这道题的思路为,首先获取一个坐标点长方体的表面积,计算公式如下:

surface = grid[i][j] * 4 + 2

然后减去其 “上、下、左、右” 与相邻长方体的重叠表面积,减去的面积应该是相邻两个长方体中高度(grid[i][j])较小的那个。

参考代码

代码一:为了方便理解,我们先写个不太精炼的, 如下:

'''

@auther: Jedi.L

@Date: Wed, Mar 27, 2019 12:44

@Email: xiangyangan@gmail.com

@Blog: www.tundrazone.com

'''

class Solution:

def surfaceArea(self, grid):

self.grid = grid

tsa = 0 # total surface area of resulting shapes

x = len(self.grid) - 1 # max i for grid[i][j]

y = len((self.grid[0])) - 1 # max j for grid[i][j]

i = 0

while i <= x:

j = 0

while j <= y:

if self.grid[i][j] != 0:

tsa += self.grid[i][j] * 4 + 2 # surface are at point

# we count the left surface area of this point as follow:

# up close

if i-1 >= 0 and self.grid[i-1][j] >= self.grid[i][j]:

tsa = tsa - self.grid[i][j]

elif i-1 >= 0 and self.grid[i-1][j] < self.grid[i][j]:

tsa = tsa - self.grid[i-1][j]

# down close

if i+1 <= x and self.grid[i+1][j] >= self.grid[i][j]:

tsa = tsa - self.grid[i][j]

elif i+1 <= x and self.grid[i+1][j] < self.grid[i][j]:

tsa = tsa - self.grid[i+1][j]

# left close

if j-1 >= 0 and self.grid[i][j-1] >= self.grid[i][j]:

tsa = tsa - self.grid[i][j]

elif j-1 >= 0 and self.grid[i][j-1] < self.grid[i][j]:

tsa = tsa - self.grid[i][j-1]

# right close

if j + 1 <= y and self.grid[i][j+1] >= self.grid[i][j]:

tsa = tsa - self.grid[i][j]

elif j + 1 <= y and self.grid[i][j+1] < self.grid[i][j]:

tsa = tsa - self.grid[i][j+1]

j = j + 1

i = i + 1

return tsa

代码二:仔细观察代码一,我们会发现其中的一些代码没有必要,每个长方体只需要考虑自己的下方和右方相邻的长方体,然后减去2倍的重叠面积就可以了,精简后的代码如下:

'''

@auther: Jedi.L

@Date: Wed, Mar 27, 2019 12:44

@Email: xiangyangan@gmail.com

@Blog: www.tundrazone.com

'''

class Solution:

def surfaceArea(self, grid):

self.grid = grid

tsa = 0 # total surface area of resulting shapes

x = len(self.grid) - 1 # max i for grid[i][j]

y = len((self.grid[0])) - 1 # max j for grid[i][j]

i = 0

while i <= x:

j = 0

while j <= y:

if self.grid[i][j] != 0:

tsa += self.grid[i][j] * 4 + 2 # surface are at point

# we count the left surface area of this point as follow:

# down close

if i + 1 <= x and self.grid[i + 1][j] >= self.grid[i][j]:

tsa = tsa - 2*self.grid[i][j]

elif i + 1 <= x and self.grid[i + 1][j] < self.grid[i][j]:

tsa = tsa - 2*self.grid[i + 1][j]

# right close

if j + 1 <= y and self.grid[i][j + 1] >= self.grid[i][j]:

tsa = tsa - 2*self.grid[i][j]

elif j + 1 <= y and self.grid[i][j + 1] < self.grid[i][j]:

tsa = tsa - 2*self.grid[i][j + 1]

j = j + 1

i = i + 1

return tsa

其它题目:[leetcode题目答案讲解汇总(Python版 持续更新)]

(https://www.jianshu.com/p/60b5241ca28e)

ps:如果您有好的建议,欢迎交流 :-D,

也欢迎访问我的个人博客 苔原带 (www.tundrazone.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值