Problem
Let"s play the minesweeper game (Wikipedia, online game)!
You are given a 2D char matrix representing the game board. "M" represents an unrevealed mine, "E" represents an unrevealed empty square, "B" represents a revealed blank square that has no adjacent (above, below, left, right, and all 4 diagonals) mines, digit ("1" to "8") represents how many mines are adjacent to this revealed square, and finally "X" represents a revealed mine.
Now given the next click position (row and column indices) 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 - change it to "X".
If an empty square ("E") with no adjacent mines is revealed, then change it to 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:
Input:
[["E", "E", "E", "E", "E"],
["E", "E", "M", "E", "E"],
["E", "E", "E", "E", "E"],
["E", "E", "E", "E", "E"]]
Click : [3,0]
Output:
[["B", "1", "E", "1", "B"],
["B", "1", "M", "1", "B"],
["B", "1", "1", "1", "B"],
["B", "B", "B", "B", "B"]]
Example 2:
Input:
[["B", "1", "E", "1", "B"],
["B", "1", "M", "1", "B"],
["B", "1", "1", "1", "B"],
["B", "B", "B", "B", "B"]]
Click : [1,2]
Output:
[["B", "1", "E", "1", "B"],
["B", "1", "X", "1", "B"],
["B", "1", "1", "1", "B"],
["B", "B", "B", "B", "B"]]
class Solution { public char[][] updateBoard(char[][] board, int[] click) { int m = board.length, n = board[0].length; int row = click[0], col = click[1]; if (board[row][col] == "M") { board[row][col] = "X"; return board; } int count = 0; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { if (i == 0 && j == 0) continue; int r = row+i, c = col+j; if (r < 0 || r >= m || c < 0 || c >= n) continue; if (board[r][c] == "M" || board[r][c] == "X") { count++; } } } if (count > 0) board[row][col] = (char)(count+"0"); else { board[row][col] = "B"; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { if (i == 0 && j == 0) continue; int r = row+i, c = col+j; if (r < 0 || r >= m || c < 0 || c >= n) continue; if (board[r][c] == "E") { updateBoard(board, new int[]{r, c}); } } } } return board; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72233.html
摘要:容器最大盛水量給定個(gè)非負(fù)整數(shù),,,,其中每個(gè)表示坐標(biāo),處的點(diǎn)。找到兩條線,它們與軸一起形成一個(gè)容器,使得容器含有最多的水。 容器最大盛水量 Container With Most Water 給定n個(gè)非負(fù)整數(shù)a1,a2,...,an,其中每個(gè)表示坐標(biāo)(i,ai)處的點(diǎn)。 繪制n條垂直線,使得線i的兩個(gè)端點(diǎn)在(i,ai)和(i,0)處。 找到兩條線,它們與x軸一起形成一個(gè)容器,使得容器...
摘要:如果后臺(tái)傳過來的對(duì)象,順序是被打亂的或者說,對(duì)象有多個(gè)屬性,在這個(gè)頁面需要按照排序,在另一個(gè)頁面需要按照數(shù)量排序這里就利用字符的屬性,進(jìn)行排序了提供了相關(guān)的方法需要進(jìn)行排序的數(shù)據(jù)一二三四值一轉(zhuǎn)值成功功值七日值禮拜值調(diào)用排序方法,按照為關(guān)鍵字 如果后臺(tái)傳過來的對(duì)象,順序是被打亂的或者說,對(duì)象有多個(gè)屬性,在這個(gè)頁面需要按照id排序,在另一個(gè)頁面需要按照數(shù)量排序這里就利用字符的Unicode...
摘要:如果后臺(tái)傳過來的對(duì)象,順序是被打亂的或者說,對(duì)象有多個(gè)屬性,在這個(gè)頁面需要按照排序,在另一個(gè)頁面需要按照數(shù)量排序這里就利用字符的屬性,進(jìn)行排序了提供了相關(guān)的方法需要進(jìn)行排序的數(shù)據(jù)一二三四值一轉(zhuǎn)值成功功值七日值禮拜值調(diào)用排序方法,按照為關(guān)鍵字 如果后臺(tái)傳過來的對(duì)象,順序是被打亂的或者說,對(duì)象有多個(gè)屬性,在這個(gè)頁面需要按照id排序,在另一個(gè)頁面需要按照數(shù)量排序這里就利用字符的Unicode...
摘要:已入深夜,不過忽然想起來之前倒騰過的一個(gè)關(guān)于電子報(bào)刊的客戶端的時(shí)候,就寫出來給大家分享一下。大功告成這篇文章主要是便于開發(fā)電子報(bào)刊應(yīng)用的時(shí)候做服務(wù)端,前端,客戶端三類開發(fā)人員互相了解對(duì)方需要做的事情,希望對(duì)大家有幫助,求支持。 已入深夜,不過忽然想起來之前倒騰過的一個(gè)關(guān)于電子報(bào)刊的客戶端的demo時(shí)候,就寫出來給大家分享一下。 我以android客戶端的作為例子(IOS大家自己一樣的做...
閱讀 1977·2021-11-24 10:45
閱讀 1465·2021-11-18 13:15
閱讀 4556·2021-09-22 15:47
閱讀 3935·2021-09-09 11:36
閱讀 2017·2019-08-30 15:44
閱讀 3096·2019-08-29 13:05
閱讀 2508·2019-08-29 12:54
閱讀 2001·2019-08-26 13:47