LeetCode-2020.8.20-扫雷游戏

【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; } }

    推荐阅读