其他分享
首页 > 其他分享> > 面试题:LC695 最大岛屿面积的改编题

面试题: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