面试题:LC695 最大岛屿面积的改编题
作者:互联网
改编题
给定一个二维矩阵,上面有0到9的数值。0代表海洋,非0代表岛屿,
非0值且数值相同相连代表平地。
求面积最大的一块平地的位置数。
如以下矩阵:
[
[3, 0, 3, 0, 5],
[4, 3, 0, 4, 5],
[3, 3, 4, 0, 3],
[3, 0, 0, 4, 4]
],
占地最大的一块平地为数字3所占据的4个位置,结果为4。
输入:二维数组
返回:int
Python解答
class S:
def dfs(self, i, j, target=1):
if not 0 <= i < len(self.nums) or not 0 <= j < len(self.nums[0]):
return 0
if self.nums[i][j] == 0:
return 0
if self.nums[i][j] != target: # 不是target直接返回0
return 0
self.nums[i][j] = 0 # 置为0没问题,因为上面的判断,不同的target是不相干扰的
return 1 + self.dfs(i-1, j, target) + self.dfs(i+1, j, target) \
+ self.dfs(i, j-1, target) + self.dfs(i, j+1, target)
def solution(self, nums):
self.nums = nums
self.maxarea = 0
for i in range(0, len(self.nums)):
for j in range(0, len(self.nums[0])):
if self.nums[i][j] != 0:
area = self.dfs(i, j, target=self.nums[i][j])
self.maxarea = max(area, self.maxarea)
return self.maxarea
nums = [[3, 0, 3, 0, 5],[4, 3, 0, 4, 5],[3, 3, 4, 0, 3],[3, 0, 0, 4, 4]]#,
# nums外面后面不能有逗号
s = S()
print(s.solution(nums))
标签:LC695,面试题,代表,岛屿,平地,矩阵,数值,改编 来源: https://www.cnblogs.com/hsiangyu-meng/p/16445975.html