From a02dfc52a46c6c8ee77789b5dfb46f0c33b09d39 Mon Sep 17 00:00:00 2001 From: asong91 Date: Mon, 25 Apr 2022 12:38:28 -0500 Subject: [PATCH] Create 130-Surrounded-Regions.java --- 130-Surrounded-Regions.java | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 130-Surrounded-Regions.java diff --git a/130-Surrounded-Regions.java b/130-Surrounded-Regions.java new file mode 100644 index 000000000..33722147a --- /dev/null +++ b/130-Surrounded-Regions.java @@ -0,0 +1,37 @@ +class Solution { + public void solve(char[][] board) { + int nRows = board.length; + int nCols = board[0].length; + + // 1a) Capture unsurrounded regions - top and bottom row (O -> T) + for (int i = 0; i < nCols; i++) { + if (board[0][i] == 'O') dfs(board, 0, i); + if (board[nRows-1][i] == 'O') dfs(board, nRows-1, i); + } + + // 1b) Capture unsurrounded regions - Left and right columns (O -> T) + for (int i = 0; i < nRows; i++) { + if (board[i][0] == 'O') dfs(board, i, 0); + if (board[i][nCols-1] == 'O') dfs(board, i, nCols-1); + } + + for (int r = 0; r < nRows; r++) { + for (int c = 0; c < nCols; c++) { + if (board[r][c] == 'O') board[r][c] = 'X'; // 2) Capture surrounded regions (O -> X) + if (board[r][c] == 'T') board[r][c] = 'O'; // 3) Uncapture unsurrounded regions (T- O) + } + } + } + + private void dfs(char[][] board, int r, int c) { + int nRows = board.length; + int nCols = board[0].length; + if (r < 0 || c < 0 || r >= nRows || c >= nCols || board[r][c] != 'O') return; + + board[r][c] = 'T'; + dfs(board, r+1, c); + dfs(board, r-1, c); + dfs(board, r, c+1); + dfs(board, r, c-1); + } +}