给定一个二维的矩阵,包含 'X'
和 'O'
(字母 O)。
找到所有被 'X'
围绕的区域,并将这些区域里所有的 'O'
用 'X'
填充。
示例:
X X X X
X O O X
X X O X
X O X X
运行你的函数后,矩阵变为:
X X X X
X X X X
X X X X
X O X X
解释:
被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O'
都不会被填充为 'X'
。 任何不在边界上,或不与边界上的 'O'
相连的 'O'
最终都会被填充为 'X'
。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。
思路:对边界的O进行dfs,把边界O的’O’变为“ * ” ,然后对边界上的" O "进行DFS,和它连通的‘ O’,都标记为‘ * ’,最后在遍历数组,把‘ O’变成‘X’,把‘ * ’,变成‘’O‘’。
代码:Python版
class Solution:
def solve(self, board):
"""
:type board: List[List[str]]
:rtype: void Do not return anything, modify board in-place instead.
"""
if board == None :
return []
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == 'O':
if i == 0 or i == len(board) -1 or j == 0 or j == len(board[0]) -1:
self.robot(board,i,j,len(board),len(board[0]))
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == 'O':
board[i][j] = 'X'
elif board[i][j] == '*':
board[i][j] = 'O'
def robot(self,board,i,j,m,n):
dx = [0,0,1,-1]
dy = [1,-1,0,0]
board[i][j] = '*'
for idx in range(4):
if i + dx[idx] >= 0 and i + dx[idx] < m and j + dy[idx] >= 0 and j + dy[idx] < n and board[i + dx[idx]][j + dy[idx]] == "O":
self.robot(board,i+dx[idx],j+dy[idx],m,n)