//dfs cannot pass the large cases.
public void solve(char[][] board) {
// Start typing your Java solution below
// DO NOT write main() function
int m = board.length;
if(m == 0) return;
int n = board[0].length;
for(int i = 0; i < m; i++) {
dfs(i, 0, board);
dfs(i, n - 1, board);
}
for(int i = 0; i < n; i++) {
dfs(0, i, board);
dfs(m - 1, i, board);
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(board[i][j] == 'O') board[i][j] = 'X';
else if(board[i][j] == 'A') board[i][j] = 'O';
}
}
}
public void dfs(int row, int column, char[][] board) {
if(row < 0 || row >= board.length || column < 0 || column >= board[0].length || board[row][column] != 'O') return;
board[row][column] = 'A';
dfs(row - 1, column, board);
dfs(row + 1, column, board);
dfs(row, column - 1, board);
dfs(row, column + 1, board);
}
//bfs
public void solve(char[][] board) {
int m = board.length;
if(m == 0) return;
int n = board[0].length;
for(int i = 0; i < m; i++) {
bfs(i, 0, board);
bfs(i, n - 1, board);
}
for(int j = 0; j < n; j++) {
bfs(0, j, board);
bfs(m - 1, j, board);
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(board[i][j] == 'O') board[i][j] = 'X';
else if(board[i][j] == 'A') board[i][j] = 'O';
}
}
}
public void bfs(int row, int column, char[][] board) {
LinkedList<Integer> list = new LinkedList<Integer>();
visit(row, column, list, board);
while(!list.isEmpty()){
int tmp = list.remove();
row = tmp / board[0].length;
column = tmp % board[0].length;
visit(row - 1, column, list, board);
visit(row, column - 1, list, board);
visit(row + 1, column, list, board);
visit(row, column + 1, list, board);
}
}
public void visit(int row, int column, LinkedList<Integer> list, char[][] board){
if(row < 0 || row >= board.length || column < 0 || column >= board[0].length || board[row][column] != 'O') return;
board[row][column] = 'A';
list.add(row * board[0].length + column);
}
Surrounded Regions
最新推荐文章于 2022-06-01 17:41:20 发布