https://leetcode.com/problems/surrounded-regions/description/
Given a 2D board containing 'X'
and 'O'
(the letter O), capture all regions surrounded by 'X'
.
A region is captured by flipping all 'O'
s into 'X'
s in that surrounded region.
Example:
X X X X X O O X X X O X X O X X
After running your function, the board should be:
X X X X X X X X X X X X X O X X
Explanation:
Surrounded regions shouldn’t be on the border, which means that any 'O'
on the border of the board are not flipped to 'X'
. Any 'O'
that is not on the border and it is not connected to an 'O'
on the border will be flipped to 'X'
. Two cells are connected if they are adjacent cells connected horizontally or vertically.
class Solution(object):
def solve(self, board):
"""
:type board: List[List[str]]
:rtype: void Do not return anything, modify board in-place instead.
"""
if not board:
return None
l = len(board)
b = len(board[0])
def toY(i,j, il, jl, b):
if i<0 or j<0 or i>=il or j>=jl or b[i][j] != "O":
return None
b[i][j] = "Y"
toY(i+1, j, il, jl, b)
toY(i-1, j, il, jl, b)
toY(i, j+1, il, jl, b)
toY(i, j-1, il, jl, b)
for i in range(0, l):
toY(i, 0, l, b, board)
toY(i, b-1, l, b, board)
for j in range(0, b):
toY(0, j, l, b, board)
toY(l-1, j, l, b, board)
for i in range(0, l):
for j in range(0, b):
if board[i][j] == "O":
board[i][j] = "X"
elif board[i][j] == "Y":
board[i][j] = "O"