老师,您能帮忙看下问题出在哪嘛,总感觉我的递归终止条件和for循环内的判断逻辑理不清楚,您能给个思路或者建议嘛?
public class LeetCode130 {
boolean[][] flag;
int[][] go = {{-1,0},{0,1},{1,0},{0,-1}};
int m,n;
public void solve(char[][] board) {
m = board.length;
if (m<1){
return;
}
n = board[0].length;
flag = new boolean[m][n];
for (int i = 1; i < m-1; i++) {
for (int j = 1;j<n-1;j++){
if (!flag[i][j]&&board[i][j]=='O'){
bfs(board,i,j,true);
}
}
}
}
private boolean bfs(char[][] board,int startX,int startY,boolean flag1){
//如果不是O返回false
if (board[startX][startX]!='O'){
return false;
}
//如果是O但是处于边界
if (board[startX][startY]=='O'&&!judgeBoard(startX,startY)){
flag1=false;
return false;
}
flag[startX][startY]=true;
board[startX][startY]='X';
for (int i = 0;i<4;i++){
int newX = startX+go[i][0];
int newY = startY+go[i][1];
if (inArea(newX,newY)&&judgeBoard(newX,newY)){
boolean a = bfs(board,newX,newY,flag1);
if (!flag1){
board[startX][startY]='O';
return false;
}
}
}
return true;
}
//判断是否为边界元素
private boolean judgeBoard(int x,int y){
if (x==m-1||x==0){
return false;
}else return y != n - 1 && y != 0;
}
//判断是否在边界内
private boolean inArea(int x,int y){
if ((x>=0&&x<m)&&(y>=0&&y<n)){
return true;
}else {
return false;
}
}
}