Leetcode 岛屿问题常由一个m*n的二维网络为基础,提出各种问题。比如:
而在解题的过程中,我们常常要用到dfs、bfs等方法进行解题。
前置课: 从二叉树的先序遍历到图的深度优先搜索
这个视频是非常棒的dfs入门视频,从二叉树入手,讲解了图和二叉树dfs的相似处,在做了岛屿问题最经典也是最简单的一道例题: LC200 岛屿数量。在做题之前推荐观看。
这个老师也有bfs的入门讲解视频,也推荐观看。但岛屿问题一般是深度优先算法。所以在这里不做要求,课后观看。
入门经典文章: 岛屿类问题的通用解法、DFS 遍历框架
文章脉络清晰,对于几个基本的岛屿问题串讲的很好。在阅读前,最好把LC200 岛屿问题弄懂,再深入弄明白岛屿问题。复习的时候直接看文章复习,看视频有点太花时间。
题目(按顺序做)
- L200. 岛屿数量 (Medium)
- 463. 岛屿的周长 (Easy)
- 695. 岛屿的最大面积 (Medium)
- 827. 最大人工岛 (Hard)
- 1020. Number of Enclaves(Medium)
- 1254. Number of Closed Islands (Medium)
- 1905. Count Sub Islands(Medium)
- 694. Number of Distinct Islands (Medium)
- 130. Surrounded Regions (Medium)
题外话
- 这几道题,我在弄懂LC200后都是自己解出来的。但是如果不仔细想明白就写题很容易掉到坑里,出现bug。
- hard题和Medium的题 思路的难度差不多 难在解题的长度和细节,需要更细心和仔细。相信自己,好好去解,就能解出来。
- 以上差不多一天解完。
题目二
微变形:
这道题不是dfs的题,是bfs的题。不知道为什么放到了这里。
常见错误
自己在解题中虽然思路正确但代码出现的粗心大意的问题有:
- int m,n 在local scope里重新定义
- 忘记对m,n 进行赋值。忘记
m = grid.size(), n = grid[0].size()