Problem · Array

Minesweeper Board Update

Learn this problem
MediumUber logoUberFULLTIMEONSITE INTERVIEW
See Uber hiring insights

Problem statement

You are given a rectangular Minesweeper board containing unrevealed empty cells E and unrevealed mines M, plus a clicked coordinate [row, column].

  • If the clicked cell is a mine, change it to X and return the board.
  • Otherwise reveal the clicked empty region. For an unrevealed empty cell, count mines in all eight neighboring positions.
  • If the count is positive, replace the cell with the digit 1 through 8 and do not expand through it.
  • If the count is zero, replace the cell with B and continue revealing all adjacent unrevealed empty cells.

Mutate and return the board after the click.

Function

updateBoard(board: char[][], click: int[]) → char[][]

Examples

Example 1

board = [["E","E","E","E","E"],["E","E","M","E","E"],["E","E","E","E","E"],["E","E","E","E","E"]]click = [3,0]return = [["B","1","E","1","B"],["B","1","M","1","B"],["B","1","1","1","B"],["B","B","B","B","B"]]

The click opens a zero-mine region. Numbered boundary cells stop expansion, and the unrevealed cell behind the mine remains E.

Example 2

board = [["M","E"],["E","E"]]click = [0,0]return = [["X","E"],["E","E"]]

Clicking the mine marks only that cell as X.

Example 3

board = [["M","E"],["E","E"]]click = [1,1]return = [["M","E"],["E","1"]]

The clicked cell touches one mine, so it becomes 1 and expansion stops immediately.

Constraints

  • 1 <= board.length, board[0].length <= 300
  • Every row has the same length.
  • Each board cell is E or M.
  • click contains a valid board coordinate.

More Uber problems

drafts saved locally
public char[][] updateBoard(char[][] board, int[] click) {
  // write your code here
}
board[["E","E","E","E","E"],["E","E","M","E","E"],["E","E","E","E","E"],["E","E","E","E","E"]]
click[3,0]
expected[["B","1","E","1","B"],["B","1","M","1","B"],["B","1","1","1","B"],["B","B","B","B","B"]]
checking account