题目规则
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水
如图所示,蓝色的代表接到的雨水

解题思路
先取得列表中最高的柱子的高度,拆分成此高度的层数,逐层遍历,每层去除两边高度为0的柱子, 每层遍历完之后执行每跟柱子高度-1
def rain(height):
"""
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水
个人思路: 先取得列表中最高的柱子的高度,拆分成此高度的层数,逐层遍历,每层去除两边高度为0的柱子, 每层遍历完之后执行每跟柱子高度-1
:param height:
:return:
"""
# 小于或等于2跟柱子时,无法储存水
if len(height) <= 2:
return 0
max_hei = max(height) # 取最高的柱子高度
all = 0 # 计算总储存水量
for i in range(max_hei):
for l in range(len(height)):
if i == 0: # 遍历第一层的时候 不执行 柱子高度 -1 操作
break
if height[0] == 0:
height.append(0)
del height[0]
else:
height.append(height[0] -1)
del height[0]
# print("第%s层 => %s" % (i + 1, height))
for j in range(len(height)):
if height[0] == 0:
del height[0]
else:
break
for k in range(len(height)-1,0,-1):
if height[-1] == 0:
del height[-1]
all += height.count(0)
print("总存储水量 => ",all)
return all
**仅供参考,如有问题, 望指正**