深度优先搜索解法:
1.先从矩阵的外部的来标记符合条件的O字符。把标记的O字符换成字符A,同时在边界的O字符的基础上继续来查找和边界相连的O字符。
2.之后用for循环来遍历二维数组遍历到记号A的字符就给他赋值为O,其他的字符都赋值为X。
class Solution {
int m,n;
public void solve(char[][] board) {
//得到矩阵的长度
m=board.length;
//得到矩阵的宽度
n=board[0].length;
//标记0列和n-1列边界的字符O
for(int i=0;i<m;i++){
biaoji(i,0,board);
biaoji(i,n-1,board);
}
//标记0行和m-1行边界的字符O
for(int j=1;j<n-1;j++){
biaoji(0,j,board);
biaoji(m-1,j,board);
}
//遍历这个二维数组的全部值
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
//判断二维数组的值是否是标记的值是的话,把标记的只改为O
if(board[i][j]=='A'){
board[i][j]='O';
}else{ //不是的话将其他的O改成X
board[i][j]='X';
}
}
}
}
//进行标记的函数
public void biaoji(int i,int j,char[][]board){
//进行查找标记
if(i<0||i>m-1||j<0||j>n-1||board[i][j]!='O'){
return;
}
//标记符合条件的值
board[i][j]='A';
//进行深度优先搜索来查找边界相邻的O
biaoji(i,j+1,board);
biaoji(i,j-1,board);
biaoji(i+1,j,board);
biaoji(i-1,j,board);
}
}