一个2D格子由0和1组成。0代表陆地,1代表水。
题目:统计有多少个最接近的陆地。
最接近的陆地:上下左右必须全部被1包围,边界如果为0的不算在内。
例子1:
图1例子2:
图2解答:<Python>
class Solution:
def closedIsland(self, grid: List[List[int]]) -> int:
# 先排除一些特例
if not grid and not grid[0]:
return 0
# 求出行数和列数
m, n = len(grid), len(grid[0])
# 定义递归方法
def dfs(i, j, flag):
if 0<=i<m and 0<=j<n and grid[i][j]==0:
# 找到0后把它变为1
grid[i][j]=flag
# 遍历右侧
dfs(i, j+1, flag)
# 遍历下侧
dfs(i+1, j, flag)
# 遍历左侧
dfs(i, j-1, flag)
# 遍历上侧
dfs(i-1, j, flag)
# 消除掉边境是陆地的(即grid[i][j]==0)
for i in range(m):
for j in range(n):
if (i==0 or j==0 or i==m-1 or j==n-1) and grid[i][j]==0:
dfs(i,j,1)
# 边界已经由于上一步规整为1,现在找境内的0, 统计得到最终答案
answer = 0
for i in range(m):
for j in range(n):
if grid[i][j]==0:
dfs(i,j,1)
answer+=1
return answer
网友评论