这一题要注意理解题意。
说的是边缘的O是不能反转的。和边缘的O相接壤的O也是不能反转的。
对每一个边缘的O,采用BFS来找到所有相邻的O,改为B
最后,剩下的O就是不在边缘的,翻转为X
把所有的B 再还原成O
class Point{
int x;
int y;
Point(int x, int y){
this.x=x;
this.y=y;
}
}
class Solution {
public void solve(char[][] board) {
if(board.length==0||board==null) return;
int rightborder = board[0].length-1;
int downborder = board.length-1;
int [][] direction = {{0,1},{0,-1},{1,0},{-1,0}};
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if((i==0||i==downborder||j==0||j==rightborder)&&board[i][j]=='O'){
Queue<Point> Q = new LinkedList<Point>();
Q.offer(new Point(i,j));
board[i][j]='B';
while(!Q.isEmpty()){
Point p = Q.poll();
for(int k=0;k<4;k++){
int x = p.x+direction[k][0];
int y = p.y+direction[k][1];
if(y>0&&y<rightborder&&x>0&&x<downborder&&board[x][y]=='O'){
Q.offer(new Point(x,y));
board[x][y] = 'B';
}
}
}
}
}
}
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(board[i][j]=='B'){
board[i][j]='O';
}
else if(board[i][j]=='O'){
board[i][j]='X';
}
}
}
}
}