Leetcode 529 Solution
This article provides solution to leetcode question 529 (minesweeper)
Access this page by simply typing in "lcs 529" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/minesweeper
Solution
class Solution:
def updateBoard(self, board: List[List[str]], click: List[int]) -> List[List[str]]:
def within_board(board, i, j):
m = len(board)
n = len(board[0])
return 0 <= i < m and 0 <= j < n
i, j = click
if board[i][j] == 'M':
board[i][j] = 'X'
return board
q = collections.deque()
q.append((i, j))
seen = {(i, j)}
while q:
i, j = q.popleft()
nei_cnt = 0
nei_cnt += 1 if within_board(board, i - 1, j) and board[i - 1][j] == 'M' else 0
nei_cnt += 1 if within_board(board, i - 1, j - 1) and board[i - 1][j - 1] == 'M' else 0
nei_cnt += 1 if within_board(board, i - 1, j + 1) and board[i - 1][j + 1] == 'M' else 0
nei_cnt += 1 if within_board(board, i, j - 1) and board[i][j - 1] == 'M' else 0
nei_cnt += 1 if within_board(board, i, j + 1) and board[i][j + 1] == 'M' else 0
nei_cnt += 1 if within_board(board, i + 1, j - 1) and board[i + 1][j - 1] == 'M' else 0
nei_cnt += 1 if within_board(board, i + 1, j) and board[i + 1][j] == 'M' else 0
nei_cnt += 1 if within_board(board, i + 1, j + 1) and board[i + 1][j + 1] == 'M' else 0
board[i][j] = 'B' if nei_cnt == 0 else str(nei_cnt)
if nei_cnt == 0:
if within_board(board, i - 1, j) and (i - 1, j) not in seen and board[i - 1][j] == 'E':
q.append((i - 1, j))
seen.add((i - 1, j))
if within_board(board, i - 1, j - 1) and (i - 1, j - 1) not in seen and board[i - 1][j - 1] == 'E':
q.append((i - 1, j - 1))
seen.add((i - 1, j - 1))
if within_board(board, i - 1, j + 1) and (i - 1, j + 1) not in seen and board[i - 1][j + 1] == 'E':
q.append((i - 1, j + 1))
seen.add((i - 1, j + 1))
if within_board(board, i, j - 1) and (i, j - 1) not in seen and board[i][j - 1] == 'E':
q.append((i, j - 1))
seen.add((i, j - 1))
if within_board(board, i, j + 1) and (i, j + 1) not in seen and board[i][j + 1] == 'E':
q.append((i, j + 1))
seen.add((i, j + 1))
if within_board(board, i + 1, j - 1) and (i + 1, j - 1) not in seen and board[i + 1][j - 1] == 'E':
q.append((i + 1, j - 1))
seen.add((i + 1, j - 1))
if within_board(board, i + 1, j) and (i + 1, j) not in seen and board[i + 1][j] == 'E':
q.append((i + 1, j))
seen.add((i + 1, j))
if within_board(board, i + 1, j + 1) and (i + 1, j + 1) not in seen and board[i + 1][j + 1] == 'E':
q.append((i + 1, j + 1))
seen.add((i + 1, j + 1))
return board