leetcode —- surrounded-regions
参考了一些博客,本题的主要思路,是对四边上的’O’进行深度搜索,如果将搜索得到的O替换为星。搜索结束后,再将结果中的O转换为X,并将*转换为O
public class sRSolution {
public void solve(char[][] board) {
if(board.length < 3 || board[0].length < 3)
return ;
for(int i = 0; i < board.length; i++ ){
if(board[i][0] == 'O')
dfs(board, i, 0);
if(board[i][board[0].length-1] == 'O')
dfs(board, i, board[0].length-1);
}
for(int i = 0; i < board[0].length; i++ ){
if(board[0][i] == 'O')
dfs(board, 0, i);
if(board[board.length-1][i] == 'O')
dfs(board, board.length-1, i);
}
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board[0].length; j++){
if(board[i][j] == 'O')
board[i][j] = 'X';
if(board[i][j] == '*')
board[i][j] = 'O';
}
}
}
public void dfs(char[][] board, int x, int y) {
if(x < 0 || y < 0 || x >= board.length || y >= board[0].length || board[x][y] != 'O')
return;
board[x][y] = '*';
dfs(board, x-1, y);
dfs(board, x+1, y);
dfs(board, x, y-1);
dfs(board, x, y+1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
sRSolution sSR = new sRSolution();
char [][] board = {{'X','X','X','X'},{'X','O','O','X'},
{'X','X','O','X'},{'X','O','X','X'}};
sSR.solve(board);
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board[0].length; j++)
System.out.print(board[i][j]+" ");
System.out.print('\n');
}
}
}