【题目】
【分析】
这题的本质就是求统计封闭岛屿的数目
1254. 统计封闭岛屿的数目
这两题的代码可以通用,就是稍微修改了一点细节
本题是求被0包围的1的个数
统计封闭岛屿的数目
是求被1包围的0的区域个数
不要求求0的个数,而求有多少个被包围的区域,所以代码只要小小的改动即可使用在本题中。如果是第一次接触此类题,可以先做统计封闭岛屿的数目
这题,然后再进阶到本题,这样会更好接受
【代码】
class Solution:
def numEnclaves(self, grid: List[List[int]]) -> int:
visited=[[0 for i in range(len(grid[0]))] for i in range(len(grid))]
cnt=0
def dfs(x,y):
if x>=0 and x<len(grid) and y>=0 and y<len(grid[0]) and grid[x][y]==1 and visited[x][y]==0:
if x==0 or x==(len(grid)-1) or y==0 or y==(len(grid[0])-1):
return False
visited[x][y]=1
ans1=dfs(x-1,y)
ans2=dfs(x+1,y)
ans3=dfs(x,y+1)
ans4=dfs(x,y-1)
if ans1 and ans2 and ans3 and ans4:
self.tmp+=1
return True and ans1 and ans2 and ans3 and ans4
if x>=0 and x<len(grid) and y>=0 and y<len(grid[0]):
return True
return False
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j]==1 and visited[i][j]==0:
self.tmp=0
res=dfs(i,j)
if res:
cnt+=self.tmp
return cnt