不同岛屿的数量

694 不同岛屿的数量

这道题要给出不同岛屿的数量,最直观的想法就是对发现的不同岛屿进行序列化,然后把序列化结果存到HashSet,那怎么序列化呢?

其实比较类似于二叉树的序列化,记录遍历顺序(方向),这里用

⽤ 1, 2, 3, 4 代表上下左右,⽤ -1, -2, -3, -4 代表上下左右的撤销,前序后续位置分别增加遍历顺序,即可实现序列化。

关于岛屿的相似题目:

  1. 岛屿数量 -- 二维矩阵的dfs算法
  2. 封闭岛屿数量 -- 二维矩阵的dfs算法
  3. 统计封闭岛屿的数目
  4. 统计子岛屿
  5. 不同岛屿的数量
python 复制代码
class NumDistinctIslands:
    """
    694 不同岛屿的数量
    https://leetcode.cn/problems/number-of-distinct-islands/
    """
    def solution(self, grid):
        islands = set()
        m, n = len(grid), len(grid[0])

        # 遍历grid,就是所有的封闭岛屿
        for i in range(m):
            for j in range(n):
                # 淹掉这个岛屿,同时存储岛屿的序列化结果
                if grid[i][j] == 1:
                    self.sb = ''
                    # 初始的⽅向可以随便写,不影响正确性
                    dir = 666
                    self.dfs_matrix(grid, i, j, dir)
                    islands.add(self.sb)
        return islands

    def dfs_matrix(self, grid, i, j, dir):
        m, n = len(grid), len(grid[0])

        # 跳出递归条件
        if i < 0 or i >= m or j < 0 or j >= n:
            return

        if grid[i][j] == 0:
            return

        # 前序序遍历位置:进入(i, j)
        grid[i][j] = 0
        self.sb += str(dir) + ','

        self.dfs_matrix(grid, i - 1, j, 1)  # 上
        self.dfs_matrix(grid, i + 1, j, 2)  # 下
        self.dfs_matrix(grid, i, j - 1, 3)  # 左
        self.dfs_matrix(grid, i, j + 1, 4)  # 右

        # 后序遍历位置:离开 (i, j)
        self.sb += str(-dir) + ','
相关推荐
源代码•宸2 天前
Leetcode—94. 二叉树的中序遍历【简单】
经验分享·后端·算法·leetcode·职场和发展·golang·dfs
源代码•宸2 天前
Leetcode—144. 二叉树的前序遍历【简单】
经验分享·算法·leetcode·面试·职场和发展·golang·dfs
不穿格子的程序员2 天前
从零开始写算法——图论篇2:课程表 + 实现前缀树(26叉树)
算法·深度优先·图论·dfs·bfs
少许极端2 天前
算法奇妙屋(二十六)-二叉树的深度搜索问题
算法·二叉树·dfs
老鼠只爱大米3 天前
LeetCode经典算法面试题 #104:二叉树的最大深度(深度优先搜索、广度优先搜索等多种实现方案详细解析)
算法·leetcode·二叉树·dfs·bfs·深度优先搜索·广度优先搜索
不穿格子的程序员4 天前
从零开始写算法——图论篇1:岛屿数量 + 腐烂的橘子
算法·深度优先·图论·dfs·bfs
源代码•宸7 天前
Leetcode—404. 左叶子之和【简单】
经验分享·后端·算法·leetcode·职场和发展·golang·dfs
源代码•宸7 天前
Leetcode—513. 找树左下角的值【中等】
经验分享·算法·leetcode·面试·职场和发展·golang·dfs
不穿格子的程序员9 天前
从零开始写算法——回溯篇4:分割回文串 + N皇后
算法·深度优先·dfs
π同学11 天前
基于RT-Thread的STM32开发第十二讲SD卡篇——DFS文件系统
stm32·dfs·rtthread·sdio