classSolution:defnumIslands(self, grid: List[List[str]])->int:
m,n=len(grid),len(grid[0])#vis = [[0]*n for _ in range(m)]defdfs(i,j):
grid[i][j]='0'for x,y in[[i+1,j],[i-1,j],[i,j+1],[i,j-1]]:if0<=x<m and0<=y<n and grid[x][y]=='1':
dfs(x,y)
res =0for i inrange(m):for j inrange(n):if grid[i][j]=='1':
res +=1
dfs(i,j)return res
classSolution:defclosedIsland(self, grid: List[List[int]])->int:
m , n =len(grid),len(grid[0])
res=0defdfs(x,y):
grid[x][y]=1for i,j in[[x+1,y],[x-1,y],[x,y+1],[x,y-1]]:if0<=i<m and0<=j<n and grid[i][j]==0:
dfs(i,j)for i inrange(n):if grid[0][i]==0:
dfs(0,i)if grid[m-1][i]==0:
dfs(m-1,i)for i inrange(m):if grid[i][0]==0:
dfs(i,0)if grid[i][n-1]==0:
dfs(i,n-1)for i inrange(1,m-1):for j inrange(1,n-1):if grid[i][j]==0:
res+=1
dfs(i,j)return res