529. Minesweeper
生活随笔
收集整理的這篇文章主要介紹了
529. Minesweeper
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
讓我們一起來(lái)玩掃雷游戲!
給定一個(gè)代表游戲板的二維字符矩陣。?'M'?代表一個(gè)未挖出的地雷,'E'?代表一個(gè)未挖出的空方塊,'B'?代表沒(méi)有相鄰(上,下,左,右,和所有4個(gè)對(duì)角線)地雷的已挖出的空白方塊,數(shù)字('1' 到 '8')表示有多少地雷與這塊已挖出的方塊相鄰,'X'?則表示一個(gè)已挖出的地雷。
現(xiàn)在給出在所有未挖出的方塊中('M'或者'E')的下一個(gè)點(diǎn)擊位置(行和列索引),根據(jù)以下規(guī)則,返回相應(yīng)位置被點(diǎn)擊后對(duì)應(yīng)的面板:
?
示例 1:
輸入: [['E', 'E', 'E', 'E', 'E'],['E', 'E', 'M', 'E', 'E'],['E', 'E', 'E', 'E', 'E'],['E', 'E', 'E', 'E', 'E']]Click : [3,0]輸出: [['B', '1', 'E', '1', 'B'],['B', '1', 'M', '1', 'B'],['B', '1', '1', '1', 'B'],['B', 'B', 'B', 'B', 'B']]解釋:示例 2:
輸入: [['B', '1', 'E', '1', 'B'],['B', '1', 'M', '1', 'B'],['B', '1', '1', '1', 'B'],['B', 'B', 'B', 'B', 'B']]Click : [1,2]輸出: [['B', '1', 'E', '1', 'B'],['B', '1', 'X', '1', 'B'],['B', '1', '1', '1', 'B'],['B', 'B', 'B', 'B', 'B']]解釋:?
注意:
DFS
類似于迷宮問(wèn)題,首先想到深度優(yōu)先搜索。
Code
def updateBoard(self, board: List[List[str]], click: List[int]) -> List[List[str]]:dirs = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)]def dfs(x, y):cnt = 0for dx, dy in dirs:nx, ny = x + dx, y + dyif not (nx < 0 or ny < 0 or nx >= len(board) or ny >= len(board[0])):cnt += board[nx][ny] == 'M'if cnt > 0:board[x][y] = str(cnt)else:board[x][y] = 'B'for dx, dy in dirs:nx, ny = x + dx, y + dyif not (nx < 0 or ny < 0 or nx >= len(board) or ny >= len(board[0]) or board[nx][ny] != 'E'):dfs(nx, ny)if board[click[0]][click[1]] == 'M':board[click[0]][click[1]] = 'X'else:dfs(click[0], click[1])return board復(fù)雜度分析
- 時(shí)間復(fù)雜度:O(nm)O(nm)O(nm),其中 nnn 和 mmm 分別代表面板的寬和高。最壞情況下會(huì)遍歷整個(gè)面板。
- 空間復(fù)雜度:O(nm)O(nm)O(nm)。空間復(fù)雜度取決于遞歸的棧深度,而遞歸棧深度在最壞情況下有可能遍歷整個(gè)面板而達(dá)到 O(nm)O(nm)O(nm)。
總結(jié)
以上是生活随笔為你收集整理的529. Minesweeper的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2020\Simulation_2\4.
- 下一篇: 111. Minimum Depth o