529. Minesweeper (M)
Last updated
Last updated
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.
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'
.
非常简单易懂的java BFS, 原则是能用BFS就别用任何递归。 输入判断我没写,实际面试里可以跟面试官确认是否需要
这道题我拆分了三个子函数,是为了满足工业代码需要注意的Cognitive Complexity, 大意就是一个函数体里if和for过多的话,因为得记住现在的判断条件,所以if/for越多越难让他人理解你的代码。因此尽量拆分出子函数(即使功能只有几行),这样逻辑上便于他人理解,而且能通过code quality check (比如sonarlint). Cognitive Complexity拓展阅读
这道题对java不是那么熟练的童鞋来说,正确用java将int转char是略微需要注意的一点。
直接typecasting char count = (char)neighborMineCount
是错误的。int值会被java看做ASCII,转换出来就不是对应的char了。 可以用以下两种转换方式,第二种更符合工业代码风格,typecasting能避免尽量避免。
char count = (char)(neighborMineCount + '0')
;
char count = Character.forDigit(neighborMineCount, 10)
遇到M就变成X
遇到已经揭开的就continue
只有B(unraveled)来进行判断要不要去队列。根据周围MINE的数量来判断