Java for LeetCode 130 Surrounded Regions

來源:互聯網
上載者:User

標籤:

 Given a 2D board containing ‘X‘ and ‘O‘, capture all regions surrounded by ‘X‘.

A region is captured by flipping all ‘O‘s into ‘X‘s in that surrounded region.

For 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
解題思路:

對最外面一圈進行BFS,替換掉最外圈的連通範圍,剩下的‘O’都是被包圍的,就可以直接kill掉,JAVA實現如下:

static public void solve(char[][] board) {if (board.length <= 2 || board[0].length <= 2)return;for (int row = 0; row < board.length; row++) {if (board[row][0] == ‘O‘) {board[row][0] = ‘T‘;bfs(board, row * board[0].length);}if (board[row][board[0].length - 1] == ‘O‘) {board[row][board[0].length - 1] = ‘T‘;bfs(board, row * board[0].length + board[0].length - 1);}}for (int col = 1; col < board[0].length - 1; col++) {if (board[0][col] == ‘O‘) {board[0][col] = ‘T‘;bfs(board, col);}if (board[board.length - 1][col] == ‘O‘) {board[board.length - 1][col] = ‘T‘;bfs(board, (board.length - 1) * board[0].length + col);}}for (int row = 0; row < board.length; row++)for (int col = 0; col < board[0].length; col++) {if (board[row][col] == ‘T‘)board[row][col] = ‘O‘;else if (board[row][col] == ‘O‘)board[row][col] = ‘X‘;}}static public void bfs(char[][] board, int num) {Queue<Integer> queue = new LinkedList<Integer>();queue.add(num);while (!queue.isEmpty()) {num=queue.poll();int row = num / board[0].length;int col = num - row * board[0].length;if (row - 1 >= 0 && board[row - 1][col] == ‘O‘) {board[row - 1][col] = ‘T‘;queue.add(num - board[0].length);}if (row + 1 <= board.length - 1 && board[row + 1][col] == ‘O‘) {board[row + 1][col] = ‘T‘;queue.add(num + board[0].length);}if (col - 1 >= 0 && board[row][col - 1] == ‘O‘) {board[row][col - 1] = ‘T‘;queue.add(num - 1);}if (col + 1 <= board[0].length - 1 && board[row][col + 1] == ‘O‘) {board[row][col + 1] = ‘T‘;queue.add(num + 1);}}}

 

Java for LeetCode 130 Surrounded Regions

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.