1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| class Solution {
public void solve(char[][] board) { if (board.length == 0) { return; }
boolean[][] flag = new boolean[board.length][board[0].length]; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { if (board[i][j] == 'O' && onBoundary(board, i, j) && !flag[i][j]) { flag[i][j] = true; spread(board, flag, i, j); } } } for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { if (board[i][j] == 'O' && !flag[i][j]) { board[i][j] = 'X'; } } } }
private void spread(char[][] board, boolean[][] flag, int row, int col) { if (row > 0 && board[row - 1][col] == 'O' && !flag[row - 1][col]) { flag[row - 1][col] = true; spread(board, flag, row - 1, col); } if (row < board.length - 1 && board[row + 1][col] == 'O' && !flag[row + 1][col]) { flag[row + 1][col] = true; spread(board, flag, row + 1, col); } if (col > 0 && board[row][col - 1] == 'O' && !flag[row][col - 1]) { flag[row][col - 1] = true; spread(board, flag, row, col - 1); } if (col < board[0].length - 1 && board[row][col + 1] == 'O' && !flag[row][col + 1]) { flag[row][col + 1] = true; spread(board, flag, row, col + 1); } }
private boolean onBoundary(char[][] board, int row, int col) { return row == 0 || row == board.length - 1 || col == 0 || col == board[0].length - 1; } }
|