题目描述
给出 n * m 个非负整数,代表一张X轴上每个区域为 1 * 1 的 2d 海拔图, 计算这个海拔图最多能接住多少(面积)雨水。
例如,给定一个 5*4 的矩阵:
输入: [[12,13,0,12],[13,4,13,12],[13,8,10,12],[12,13,12,12],[13,13,13,13]]
输出: 14
原题链接https://leetcode-cn.com/problems/trapping-rain-water-ii/
https://www.lintcode.com/problem/trapping-rain-water-ii/description
- 思路一
大纲:找二维数组的最小值,判断四周是否大于它,如果大,则将四周的最小值赋值给二维数组的最小值,并记录差值,循环往复,累加差值。
- 找到海拔最低点D(二维数组最小值)的下标加入列表xb,及D前后左右方位的值放在列表q中。
- 比较最低点D与q中最小值的大小,如果q的最小值等于D,则将q的最小值点作为新的D点,重复1,2步骤。
- 如果q的最小值大于D,则将q的最小值赋值给D,如果xb中的点不在数组的最外层,则所求结果应累加 列表xb的长度 *(q的最小值 - D),重复上述步骤直到D等于二维数组的最大值结束。
看到这里可以试着自己写一写哦
class Solution(object):
# 返回最小值下标
def mind(self,yus):
a = [min(i) for i in yus]
a = a.index(min(a))
b = [i.index(min(i)) for i in yus][a]
return a,b
# 获得上下左右的数据
def lrud(self,yus,i,j,m,n,ma):
if i > 0:up = yus[i-1][j] #上
else:up = ma
if i < m-1:dn = yus[i+1][j] #下