130. Surrounded Regions
Posted wentiliangkaihua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了130. Surrounded Regions相关的知识,希望对你有一定的参考价值。
Given a 2D board containing ‘X‘
and ‘O‘
(the letter O), capture all regions surrounded by ‘X‘
.
A region is captured by flipping all ‘O‘
s into ‘X‘
s in that surrounded region.
Example:
X X X X X O O X X X O X X O X X
After running your function, the board should be:
X X X X X X X X X X X X X O X X
Explanation:
Surrounded regions shouldn’t be on the border, which means that any ‘O‘
on the border of the board are not flipped to ‘X‘
. Any ‘O‘
that is not on the border and it is not connected to an ‘O‘
on the border will be flipped to ‘X‘
. Two cells are connected if they are adjacent cells connected horizontally or vertically.
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);
先把周围的o找到替换成*,然后把跟边界o相连的o也替换成*,然后把仍存在的O换成X,再把*换回O
以上是关于130. Surrounded Regions的主要内容,如果未能解决你的问题,请参考以下文章