链接: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上编号为529的扫雷问题,通过模拟+搜索策略,利用DFS深度优先搜索实现了算法的高效解决。文章详细介绍了从理解题目到算法实现的过程,包括如何正确判断雷区周围的状态,以及如何处理空格和雷区的递归搜索。
1084

被折叠的 条评论
为什么被折叠?



