老师,按照您的建议我重新修改了一下代码,第25个用例没通过,您能帮忙看下是逻辑上的问题还是其他细节问题嘛
public class LeetCode130 {
boolean[][] flag;
int[][] go = {{-1,0},{0,1},{1,0},{0,-1}};
int m,n;
//设置一个判断遍历元素中是否有边界元素的标志
boolean isBoundaryFlag;
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'){
dfs(board,i,j,false);
}
}
}
}
private void dfs(char[][] board,int startX,int startY,boolean isBoundaryFlag){
//是否为边界元素,如果是将标志位改变回溯
if (isBoundary(startX,startY)){
isBoundaryFlag = true;
return;
}
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)&&!flag[newX][newY]&&board[startX][startY]=='O'){
dfs(board,newX,newY,isBoundaryFlag);
}
if (isBoundaryFlag){
board[startX][startY]='O';
break;
}
}
return;
}
//判断是否为边界元素
private boolean isBoundary(int x,int y){
if (x==m-1||x==0||y==n-1||y==0){
return true;
}else {
return false;
}
}
//判断坐标是否在矩阵内
private boolean inArea(int x,int y){
if ((x>=0&&x<m)&&(y>=0&&y<n)){
return true;
}else {
return false;
}
}
}