/* 针对这个问题: 1首先如果row,col都是小于2,返回。 2挑选出四个方向边界处为O的进行DFS遍历操作 对于DFS函数,注意四个方向遍历的条件 对于遍历到的O转换成* 最后主函数处理,如果是*则变为O,如果是O说明没有遍历到,则变为X */ public void solve(char[][] board){ if(board.length<2||board[0].length<2)return; int row=board.length,col=board[0].length; for(int i=0;i<row;i++){ if(board[i][0]=='O')DFS(board,i,0); if(board[i][col-1]=='O')DFS(board,i,col-1); } for(int j=0;j<col;j++) { if(board[0][j]=='O')DFS(board,0,j); if(board[row-1][j]=='O')DFS(board,row-1,j); } for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(board[i][j]=='O'){ board[i][j]='X'; } else if(board[i][j]=='*'){ board[i][j]='O'; } } } } public void DFS(char[][] board, int row, int col){ if(row<0||col<0||row>board.length-1||col>board[0].length-1){ return; } if(board[row][col]=='O'){ board[row][col]='*'; } if(row>1&&board[row-1][col]=='O'){ DFS(board,row-1,col); } if(row<board.length-2&&board[row+1][col]=='O'){ DFS(board,row+1,col); } if(col>1&&board[row][col-1]=='O'){ DFS(board,row,col-1); } if(col<board[0].length-2&&board[row][col+1]=='O'){ DFS(board,row,col+1); } }
130. Surrounded Regions
最新推荐文章于 2024-01-21 17:09:59 发布