Minesweeper LeetCode solution in Java

1
class Solution {
2
public char[][] updateBoard(char[][] board, int[] click) {
3
int r = click[0];
4
int c = click[1];
5
if (board[r][c] == 'M') {
6
board[r][c] = 'X';
7
return board;
8
}
9
dfs(board, r, c);
10
return board;
11
}
12

13
private void dfs(char[][] board, int r, int c) {
14
if (r < 0
15
|| r >= board.length
16
|| c >= board[0].length
17
|| c < 0
18
|| board[r][c] == 'B') // Stop case
19
return;
20
int num = countMine(board, r, c); // count how many adjacent mines
21
if (num != 0) {
22
board[r][c] = (char) ('0' + num);
23
return;
24
} else {
25
board[r][c] = 'B';
26
dfs(board, r + 1, c); // recursively search all neighbors
27
dfs(board, r - 1, c);
28
dfs(board, r, c + 1);
29
dfs(board, r, c - 1);
30
dfs(board, r - 1, c - 1);
31
dfs(board, r + 1, c - 1);
32
dfs(board, r - 1, c + 1);
33
dfs(board, r + 1, c + 1);
34
}
35
}
36

37
private int countMine(char[][] board, int r, int c) {
38
int count = 0;
39
for (int i = r - 1; i <= r + 1; ++i) {
40
for (int j = c - 1; j <= c + 1; ++j) {
41
if (i >= 0 && i < board.length && j >= 0 && j < board[0].length) {
42
if (board[i][j] == 'M') count++;
43
}
44
}
45
}
46
return count;
47
}
48
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0