1254. 统计封闭岛屿的数目
问题描述
有一个二维矩阵 grid,每个位置要么是陆地(记号为0 )要么是水域(记号为1 )。
我们从一块陆地出发,每次可以往上下左右4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。
如果一座岛屿 完全 由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。
请返回封闭岛屿的数目。
Example 1
1 | 输入:grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]] |
Example 2
1 | 输入:grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]] |
Example 3
1 | 输入:grid = [[1,1,1,1,1,1,1], |
题解
全题目最重要的一点就是,如果0岛屿能碰到边界,就不算封闭岛屿。
所以只需要扩散搜索所有的0岛屿,碰到边界就不算就可以了。
注意不要return里面写一串and,短路求值可能导致后面的扩散操作不被执行。
搜索
1 | from typing import List, Set, Tuple |
测试代码
1 | grid = [[0, 0, 1, 0, 0], |
1
1 | grid = [[1, 1, 1, 1, 1, 1, 1], |
2
1 | grid = [[0, 0, 1, 1, 0, 1, 0, 0, 1, 0], |
5