LeetCode 130. 被圍繞的區域 Pyhton
阿新 • • 發佈:2019-01-24
給定一個二維的矩陣,包含 '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)