難度:中等 ??????類型: 數(shù)組
給定一個二維的矩陣油航,包含 'X' 和 'O'(字母 O)肃廓。
找到所有被 'X' 圍繞的區(qū)域,并將這些區(qū)域里所有的 '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
解釋:
被圍繞的區(qū)間不會存在于邊界上悔政,換句話說翁涤,任何邊界上的 'O' 都不會被填充為 'X'桥言。 任何不在邊界上,或不與邊界上的 'O' 相連的 'O' 最終都會被填充為 'X'葵礼。如果兩個元素在水平或垂直方向相鄰限书,則稱它們是“相連”的。
解題思路
BFS:
搜索二維矩陣邊界上的‘O'章咧,再以此’O'為起點廣度優(yōu)先搜索倦西,所到之處全部標記為‘T'
如示例中的輸入就變?yōu)椋?br>
X X X X
X O O X
X X O X
X T X X
遍歷數(shù)組,將'O'替換為’X','T‘替換為’X',即可
代碼實現(xiàn)
class Solution:
def solve(self, board: List[List[str]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
r = len(board)
if not r:
return
c = len(board[0])
def bfs(board, i, j):
if 0<=i<r and 0<=j<c and board[i][j] == 'O':
board[i][j] = 'T'
bfs(board, i, j+1)
bfs(board, i, j-1)
bfs(board, i+1, j)
bfs(board, i-1, j)
for i in range(r):
for j in range(c):
if (i==0 or i==r-1 or j==0 or j==c-1) and board[i][j]=='O':
bfs(board, i, j)
for i in range(r):
for j in range(c):
board[i][j] = 'O' if board[i][j]=='T' else 'X'