Problem
Let’s play the minesweeper game (Wikipedia, online game)!
You are given an m x n
char matrix board
representing the game board where:
'M'
represents an unrevealed mine,'E'
represents an unrevealed empty square,'B'
represents a revealed blank square that has no adjacent mines (i.e., above, below, left, right, and all 4 diagonals),- digit (
'1'
to'8'
) represents how many mines are adjacent to this revealed square, and 'X'
represents a revealed mine.
You are also given an integer array click
where click = [clickr, clickc]
represents the next click position among all the unrevealed squares ('M'
or
'E'
).
Return the board after revealing this position according to the following rules :
- If a mine
'M'
is revealed, then the game is over. You should change it to'X'
. - If an empty square
'E'
with no adjacent mines is revealed, then change it to a revealed blank'B'
and all of its adjacent unrevealed squares should be revealed recursively. - If an empty square
'E'
with at least one adjacent mine is revealed, then change it to a digit ('1'
to'8'
) representing the number of adjacent mines. - Return the board when no more squares will be revealed.
Examples
Example 1
|
|
Example 2
|
|
Constraints
m == board.length
n == board[i].length
1 <= m, n <= 50
board[i][j]
is either'M'
,'E'
,'B'
, or a digit from'1'
to'8'
.click.length == 2
0 <= clickr < m
0 <= clickc < n
board[clickr][clickc]
is either'M'
or'E'
.
Solution
Method 1 – Depth-First Search (DFS)
Intuition
To reveal cells in Minesweeper, use DFS to uncover empty cells and recursively reveal their neighbors if they have no adjacent mines. If a cell is adjacent to mines, mark it with the count; if it’s a mine, mark it as ‘X’.
Approach
- If the clicked cell is a mine (‘M’), change it to ‘X’ and return the board.
- Otherwise, start DFS from the clicked cell:
- Count adjacent mines.
- If count > 0, mark cell with the count.
- If count == 0, mark cell as ‘B’ and recursively reveal all adjacent unrevealed cells.
- Use directions to check all 8 neighbors.
- Return the updated board.
Code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Complexity
- ⏰ Time complexity:
O(mn)
, each cell is visited at most once. - 🧺 Space complexity:
O(mn)
, for recursion stack in worst case.