classSolution:defsolve(self, board: List[List[str]])->None:"""
Do not return anything, modify board in-place instead.
"""ifnot board:return
n, m =len(board),len(board[0])defdfs(x, y):ifnot0<= x < n ornot0<= y < m or board[x][y]!='O':return
board[x][y]="A"# 把4个边界上的"O"先标记为"A"
dfs(x +1, y)
dfs(x -1, y)
dfs(x, y +1)
dfs(x, y -1)for i inrange(n):
dfs(i,0)
dfs(i, m -1)for i inrange(m -1):
dfs(0, i)
dfs(n -1, i)for i inrange(n):for j inrange(m):# 把边界上的"A"还原成"O"if board[i][j]=="A":
board[i][j]="O"# 把非边界上的"O"变成"X"elif board[i][j]=="O":
board[i][j]="X"
classSolution:defsolve(self, board: List[List[str]])->None:ifnot board:return
n, m =len(board),len(board[0])
que = collections.deque()for i inrange(n):if board[i][0]=="O":
que.append((i,0))
board[i][0]="A"if board[i][m -1]=="O":
que.append((i, m -1))
board[i][m -1]="A"for i inrange(m -1):if board[0][i]=="O":
que.append((0, i))
board[0][i]="A"if board[n -1][i]=="O":
que.append((n -1, i))
board[n -1][i]="A"while que:
x, y = que.popleft()for mx, my in[(x -1, y),(x +1, y),(x, y -1),(x, y +1)]:if0<= mx < n and0<= my < m and board[mx][my]=="O":
que.append((mx, my))
board[mx][my]="A"for i inrange(n):for j inrange(m):if board[i][j]=="A":
board[i][j]="O"elif board[i][j]=="O":
board[i][j]="X"
classSolution:defislandPerimeter(self, grid: List[List[int]])->int:
m, n =len(grid),len(grid[0])
ans =0for i inrange(m):for j inrange(n):if grid[i][j]:for x, y in[[i -1, j],[i +1, j],[i, j -1],[i, j +1]]:ifnot(0<= x < m and0<= y < n)or grid[x][y]==0:
ans +=1return ans
官方题解DFS + BFS + 并查集class Solution: def solve(self, board: List[List[str]]) -> None: """ Do not return anything, modify board in-place instead. """ if not board: return n, m = len(boa..