[8.20]leetcode 每日一题,
题为扫雷游戏,一看题就知道是图的遍历问题,直接上dfs或者bfs框架,然后往里面填东西,这里有八个方向,所以使用xG和yG俩数组来模拟每个方向。{(0,1),(0,-1)...(-1,1),(-1,-1)}
点开一个点,会判断它是不是雷:
点到 M,就是踩雷了,更新为X,游戏结束。
点到 E,就是空地,分两种情况:
周围8个格子有地 雷,更新为雷数。
没有地 雷,更新为 B,并继续探测这8个格子。
题为扫雷游戏,一看题就知道是图的遍历问题,直接上dfs或者bfs框架,然后往里面填东西,这里有八个方向,所以使用xG和yG俩数组来模拟每个方向。{(0,1),(0,-1)...(-1,1),(-1,-1)}
点开一个点,会判断它是不是雷:
点到 M,就是踩雷了,更新为X,游戏结束。
点到 E,就是空地,分两种情况:
周围8个格子有地 雷,更新为雷数。
没有地 雷,更新为 B,并继续探测这8个格子。
class Solution { int[] xG = {0, 1, -1, 0, 1, -1, -1, 1}; int[] yG = {1, 0, 0, -1, 1, -1, 1, -1}; public char[][] updateBoard(char[][] board, int[] click) { int x = click[0]; int y = click[1]; if (board[x][y] == 'M') { board[x][y] = 'X'; return board; } else { dfs(board, x, y); } return board; } public void dfs(char[][] board, int x, int y) { int count = 0; for (int i = 0; i < 8; i++) { int tx = x + xG[i]; int ty = y + yG[i]; if (tx >= 0 && tx < board.length && ty >= 0 && ty < board[0].length &&board[tx][ty] == 'M') { count++; } } if (count > 0) { board[x][y] = (char) (count + '0'); } else { board[x][y] = 'B'; for (int i = 0; i < 8; i++) { int tx = x + xG[i]; int ty = y + yG[i]; if (tx >= 0 && tx < board.length && ty >= 0 && ty < board[0].length) { if (board[tx][ty] == 'E') { dfs(board, tx, ty); } } } } }}
还未添加个人签名 2020.08.19 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论