-
-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy path0130-surrounded-regions.py
More file actions
122 lines (97 loc) · 5.3 KB
/
0130-surrounded-regions.py
File metadata and controls
122 lines (97 loc) · 5.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# time complexity: O(m*n)
# space complexity: O(1)
from collections import deque
from typing import List
class Solution:
def solve(self, board: List[List[str]]) -> None:
m, n = len(board), len(board[0])
def dfs(x: int, y: int):
board[x][y] = "#"
for X, Y in ((x + 1, y), (x, y + 1), (x-1, y), (x, y-1)):
if 0 <= X < m and 0 <= Y < n and board[X][Y] == 'O':
dfs(X, Y)
for i in range(m):
if board[i][0] == 'O':
dfs(i, 0)
if board[i][n-1] == 'O':
dfs(i, n-1)
for i in range(n):
if board[0][i] == 'O':
dfs(0, i)
if board[m-1][i] == 'O':
dfs(m-1, i)
for i in range(m):
for j in range(n):
if board[i][j] == 'O':
board[i][j] = 'X'
if board[i][j] == '#':
board[i][j] = 'O'
return board
# time complexity: O(m*n)
# space complexity: O(1)
class Solution:
def solve(self, board: List[List[str]]) -> None:
m, n = len(board), len(board[0])
def dfs(x: int, y: int):
board[x][y] = "#"
for X, Y in ((x + 1, y), (x, y + 1), (x-1, y), (x, y-1)):
if 0 <= X < m and 0 <= Y < n and board[X][Y] == 'O':
dfs(X, Y)
for i in range(m):
if board[i][0] == 'O':
dfs(i, 0)
if board[i][n-1] == 'O':
dfs(i, n-1)
for i in range(n):
if board[0][i] == 'O':
dfs(0, i)
if board[m-1][i] == 'O':
dfs(m-1, i)
for i in range(m):
for j in range(n):
if board[i][j] == 'O':
board[i][j] = 'X'
if board[i][j] == '#':
board[i][j] = 'O'
return board
class Solution:
def solve(self, board: List[List[str]]) -> None:
ROW = len(board)
COL = len(board[0])
def bfs(r, c):
queue = deque()
queue.append((r, c))
board[r][c] = "#"
while queue:
currR, currC = queue.popleft()
for dR, dC in [(1, 0), (0, 1), (-1, 0), (0, -1)]:
nextR = currR + dR
nextC = currC + dC
if 0 <= nextR < ROW and 0 <= nextC < COL and board[nextR][nextC] == 'O':
board[nextR][nextC] = '#'
queue.append((nextR, nextC))
for r in range(ROW):
if board[r][0] == 'O':
bfs(r, 0)
if board[r][COL - 1] == 'O':
bfs(r, COL - 1)
for c in range(COL):
if board[0][c] == 'O':
bfs(0, c)
if board[ROW - 1][c] == 'O':
bfs(ROW - 1, c)
for r in range(ROW):
for c in range(COL):
if board[r][c] == 'O':
board[r][c] = 'X'
if board[r][c] == '#':
board[r][c] = 'O'
return board
board = [["X", "X", "X", "X"], ["X", "O", "O", "X"],
["X", "X", "O", "X"], ["X", "O", "X", "X"]]
print(Solution().solve(board))
board = [["X"]]
print(Solution().solve(board))
board = [["O", "O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["X", "O", "O", "X", "O", "X", "O", "O", "O", "O", "X", "O", "O", "X", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "X", "X", "O"], ["O", "X", "X", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "X", "X", "O"], ["O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "X", "O"], ["O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], [
"O", "O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "X", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["X", "O", "O", "O", "O", "O", "O", "O", "O", "X", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "X"], ["O", "O", "O", "O", "O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "X", "O", "X", "O", "O"], ["O", "X", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], ["O", "O", "O", "O", "O", "O", "O", "O", "X", "X", "O", "O", "O", "X", "O", "O", "X", "O", "O", "X"], ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]]
print(Solution().solve(board))