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; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72233.html
摘要:如果后臺傳過來的對象,順序是被打亂的或者說,對象有多個屬性,在這個頁面需要按照排序,在另一個頁面需要按照數量排序這里就利用字符的屬性,進行排序了提供了相關的方法需要進行排序的數據一二三四值一轉值成功功值七日值禮拜值調用排序方法,按照為關鍵字 如果后臺傳過來的對象,順序是被打亂的或者說,對象有多個屬性,在這個頁面需要按照id排序,在另一個頁面需要按照數量排序這里就利用字符的Unicode...
摘要:如果后臺傳過來的對象,順序是被打亂的或者說,對象有多個屬性,在這個頁面需要按照排序,在另一個頁面需要按照數量排序這里就利用字符的屬性,進行排序了提供了相關的方法需要進行排序的數據一二三四值一轉值成功功值七日值禮拜值調用排序方法,按照為關鍵字 如果后臺傳過來的對象,順序是被打亂的或者說,對象有多個屬性,在這個頁面需要按照id排序,在另一個頁面需要按照數量排序這里就利用字符的Unicode...
摘要:已入深夜,不過忽然想起來之前倒騰過的一個關于電子報刊的客戶端的時候,就寫出來給大家分享一下。大功告成這篇文章主要是便于開發電子報刊應用的時候做服務端,前端,客戶端三類開發人員互相了解對方需要做的事情,希望對大家有幫助,求支持。 已入深夜,不過忽然想起來之前倒騰過的一個關于電子報刊的客戶端的demo時候,就寫出來給大家分享一下。 我以android客戶端的作為例子(IOS大家自己一樣的做...
閱讀 1973·2021-11-24 10:45
閱讀 1462·2021-11-18 13:15
閱讀 4547·2021-09-22 15:47
閱讀 3929·2021-09-09 11:36
閱讀 2014·2019-08-30 15:44
閱讀 3094·2019-08-29 13:05
閱讀 2505·2019-08-29 12:54
閱讀 1997·2019-08-26 13:47