130. Surrounded Regions - python3
4208 ワード
class Solution {
public void solve(char[][] board) {
if (board.length == 0 || board[0].length == 0) return;
if (board.length < 3 || board[0].length < 3) return;
int m = board.length;
int n = board[0].length;
for (int i = 0; i < m; i++) {
if (board[i][0] == 'O') helper(board, i, 0);
if (board[i][n - 1] == 'O') helper(board, i, n - 1);
}
for (int j = 1; j < n - 1; j++) {
if (board[0][j] == 'O') helper(board, 0, j);
if (board[m - 1][j] == 'O') helper(board, m - 1, j);
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == 'O') board[i][j] = 'X';
if (board[i][j] == '*') board[i][j] = 'O';
}
}
}
private void helper(char[][] board, int r, int c) {
if (r < 0 || c < 0 || r > board.length - 1 || c > board[0].length - 1 || board[r][c] != 'O') return;
board[r][c] = '*';
helper(board, r + 1, c);
helper(board, r - 1, c);
helper(board, r, c + 1);
helper(board, r, c - 1);
}
}
Runtime: 4 ms, faster than 21.57% of Java online submissions for Surrounded Regions.Memory Usage: 49 MB, less than 5.85% of Java online submissions for Surrounded Regions.
DFSのソリューションを使って…^^
オーバーフローに注意.
public class Solution {
protected Integer ROWS = 0;
protected Integer COLS = 0;
public void solve(char[][] board) {
if (board == null || board.length == 0) {
return;
}
this.ROWS = board.length;
this.COLS = board[0].length;
List<Pair<Integer, Integer>> borders = new LinkedList<Pair<Integer, Integer>>();
// Step 1). construct the list of border cells
for (int r = 0; r < this.ROWS; ++r) {
borders.add(new Pair(r, 0));
borders.add(new Pair(r, this.COLS - 1));
}
for (int c = 0; c < this.COLS; ++c) {
borders.add(new Pair(0, c));
borders.add(new Pair(this.ROWS - 1, c));
}
// Step 2). mark the escaped cells
for (Pair<Integer, Integer> pair : borders) {
this.DFS(board, pair.first, pair.second);
}
// Step 3). flip the cells to their correct final states
for (int r = 0; r < this.ROWS; ++r) {
for (int c = 0; c < this.COLS; ++c) {
if (board[r][c] == 'O')
board[r][c] = 'X';
if (board[r][c] == 'E')
board[r][c] = 'O';
}
}
}
protected void DFS(char[][] board, int row, int col) {
if (board[row][col] != 'O')
return;
board[row][col] = 'E';
if (col < this.COLS - 1)
this.DFS(board, row, col + 1);
if (row < this.ROWS - 1)
this.DFS(board, row + 1, col);
if (col > 0)
this.DFS(board, row, col - 1);
if (row > 0)
this.DFS(board, row - 1, col);
}
}
class Pair<U, V> {
public U first;
public V second;
public Pair(U first, V second) {
this.first = first;
this.second = second;
}
}
Runtime: 3 ms, faster than 32.25% of Java online submissions for Surrounded Regions.Memory Usage: 40.8 MB, less than 91.09% of Java online submissions for Surrounded Regions.
これはLeetcodeが提供するソリューションです.
もっと速く
Reference
この問題について(130. Surrounded Regions - python3), 我々は、より多くの情報をここで見つけました https://velog.io/@jwade/98.-Validate-Binary-Search-Tree-3b3nue6uテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol