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

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/271648.html

(0)
上一篇 2022年7月5日 15:04
下一篇 2022年7月5日 15:14

相关推荐

发表回复

登录后才能评论