pass 211 77 433
This commit is contained in:
63
130-240602-pass/main.py
Normal file
63
130-240602-pass/main.py
Normal file
@@ -0,0 +1,63 @@
|
||||
class Solution:
|
||||
def solve(self, board: List[List[str]]) -> None:
|
||||
"""
|
||||
Do not return anything, modify board in-place instead.
|
||||
"""
|
||||
que = []
|
||||
front = -1
|
||||
tail = -1
|
||||
|
||||
def push_back(que, front, tail, ele):
|
||||
lq = len(que)
|
||||
tail += 1
|
||||
if lq <= tail:
|
||||
que.append(ele)
|
||||
else:
|
||||
que[tail] = ele
|
||||
return tail
|
||||
def pop(que, front, tail):
|
||||
front += 1
|
||||
return (que[front], front)
|
||||
d = [(1,0),(-1,0),(0,1),(0,-1)]
|
||||
height = len(board)
|
||||
width = len(board[0])
|
||||
def is_valid(x, y):
|
||||
if x<0 or y < 0 or x >= height or y >= width:
|
||||
return False
|
||||
return True
|
||||
is_visited = []
|
||||
for x, l in enumerate(board):
|
||||
is_visited.append([])
|
||||
for y in l:
|
||||
is_visited[x].append(0)
|
||||
if height < 3 or width < 3:
|
||||
return board
|
||||
def is_edge(x, y):
|
||||
if x == 0 or y == 0 or x == height - 1 or y == width - 1:
|
||||
return True
|
||||
return False
|
||||
for x in range(1,height - 1):
|
||||
for y in range(1,width - 1):
|
||||
if board[x][y] == 'X' or is_visited[x][y] == 1: continue
|
||||
tail = push_back(que,front, tail,(x,y))
|
||||
flag = 0
|
||||
last_front = front
|
||||
while front != tail:
|
||||
(top_ele, front) = pop(que, front, tail)
|
||||
for (cx, cy) in d:
|
||||
nx = cx + top_ele[0]
|
||||
ny = cy + top_ele[1]
|
||||
if is_edge(nx, ny):
|
||||
if board[nx][ny] == 'O':
|
||||
flag = 1
|
||||
continue
|
||||
if board[nx][ny] == 'O' and is_visited[nx][ny]==0:
|
||||
tail = push_back(que,front,tail,(nx,ny))
|
||||
is_visited[nx][ny]=1
|
||||
if flag == 0:
|
||||
for idx in range(last_front + 1, front + 1):
|
||||
xx = que[idx][0]
|
||||
yy = que[idx][1]
|
||||
board[xx][yy]='X'
|
||||
return board
|
||||
|
Reference in New Issue
Block a user