【LeetCode-2020.8.20-扫雷游戏】链接:LeetCode529
过程:开始看题目还以往很难,毕竟越长的题目一般越难,觉得还行,模拟+搜索,搜索dfs和bfs基本操作,然后做了,然后错了,然后再看题,再冷静思考,经历了一阵发呆后,原来不是上下左右四种状态而是上下左右加对角八种,然后就可以了。
思路:模拟+搜索
代码:
class Solution {
char[][] board;
int[][] dxy={
{0,0,-1,1,-1,-1,1,1},
{-1,1,0,0,-1,1,-1,1}
};
int n,m;
public char[][] updateBoard(char[][] board, int[] click) {
if(board==null)return board;
this.board=board;
n=board.length;
m=board[0].length;
dfs(click[0],click[1]);
return board;
}
void dfs(int x,int y){
if(board[x][y]=='M'){
board[x][y]='X';
return;
}
if(board[x][y]!='E')return;
int hh;
if((hh=judge(x,y))>0){
board[x][y]=(char)(hh+'0');
return;
}
board[x][y]='B';
int nx,ny;
for(int i=0;
i<8;
i++){
nx=x+dxy[0][i];
ny=y+dxy[1][i];
if(nx<0||nx>=n||ny<0||ny>=m)continue;
dfs(nx,ny);
}
}
int judge(int x,int y){
int nx,ny,cnt=0;
for(int i=0;
i<8;
i++){
nx=x+dxy[0][i];
ny=y+dxy[1][i];
if(nx<0||nx>=n||ny<0||ny>=m)continue;
if(board[nx][ny]=='M')cnt++;
}
return cnt;
}
}
推荐阅读
- LeetCode-20.8.22-24点游戏
- LeetCode647-20.8.19-回文字串
- LeetCode111-20.8.21-二叉树的最小深度
- LeetCode109-20.8.18-有序链表转二叉搜索树