首先对边界上每一个'O'做深度优先搜索,将与其相连的所有'O'改为'P'。然后遍历矩阵,将矩阵中所有'O'改为'X',将矩阵中所有P'变为'O' 。
class Solution:
def solve(self, board: List[List[str]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
if not board or len(board) == 1 or len(board[0]) == 1:
return
m, n = len(board), len(board[0])
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
def dfs(x,y):
for k in range(4):
xx = x + dx[k]
yy = y + dy[k]
if 0 <= xx <m and 0 <= yy < n:
if board[xx][yy] == 'O':
board[xx][yy] = 'P' #给走过的点染色
dfs(xx, yy)
# 以下在从四周往里找相邻的所有点
i = 0
for j in range(n): # 上边
if board[i][j] == 'O':
board[i][j] = 'P'
dfs(i, j)
i = m - 1
for j in range(n): # 下边
if board[i][j] == 'O':
board[i][j] = 'P'
dfs(i, j)
j = 0
for i in range(m): # 左边
if board[i][j] == 'O':
board[i][j] = 'P'
dfs(i, j)
j = n - 1
for i in range(m): # 右边
if board[i][j] == 'O':
board[i][j] = 'P'
dfs(i, j)
# 染色回来
for i in range(m):
for j in range(n):
if board[i][j] == 'P':
board[i][j] = 'O'
elif board[i][j] == 'O':
board[i][j] = 'X'
return