摘要:先用處理左右邊界上的換成再用處理上下邊界除去四角的換成把剩下的沒有被處理過,也就是被包圍的置為把所有暫時(shí)置為的不被包圍的換回如當(dāng)前字符的坐標(biāo)越界不是,返回是的都置為,然后迭代其上下左右各點(diǎn)
Problem
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.
X X X X X O O X X X O X X O X X
After capture all regions surrounded by "X", the board should be:
X X X X X X X X X X X X X O X XSolution
public class Solution { public void surroundedRegions(char[][] board) { // Write your code here if (board == null || board.length < 2 || board[0].length < 2) return; int m = board.length; int n = board[0].length; //先用bfs處理左右邊界上的"O"(換成"#") for (int i = 0; i < m; i++) { if (board[i][0] == "O") { bfs(board, i, 0); } if (board[i][n-1] == "O") { bfs(board, i, n-1); } } //再用bfs處理上下邊界(除去四角)的"O"(換成"#") for (int i = 1; i < n-1; i++) { if (board[0][i] == "O") { bfs(board, 0, i); } if (board[m-1][i] == "O") { bfs(board, m-1, i); } } //把剩下的沒有被處理過,也就是被包圍的"O"置為"X" for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (board[i][j] == "O") { board[i][j] = "X"; } } } //把所有暫時(shí)置為"#"的不被包圍的"O"換回"O" for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (board[i][j] == "#") { board[i][j] = "O"; } } } } public void bfs(char[][] board, int row, int col) { //如當(dāng)前字符的坐標(biāo)越界or不是"O",返回 if (row < 0 || row >= board.length || col < 0 || col >= board[0].length || board[row][col] != "O") { return; } //是"O"的都置為"#",然后迭代其上下左右各點(diǎn) board[row][col] = "#"; bfs(board, row-1, col); bfs(board, row+1, col); bfs(board, row, col-1); bfs(board, row, col+1); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/65412.html
摘要:將所有和邊界相連的都標(biāo)記出來(lái)。那么當(dāng)我重新遍歷數(shù)組的時(shí)候,剩下的則是被完全包圍的。 題目要求 Given a 2D board containing X and O (the letter O), capture all regions surrounded by X. A region is captured by flipping all Os into Xs in that s...
摘要:原題鏈接邊緣搜索替換法復(fù)雜度時(shí)間空間思路從矩陣的四條邊上的點(diǎn)作為起點(diǎn),搜索連續(xù)的一塊區(qū)域上值為的點(diǎn)并賦為一個(gè)臨時(shí)變量。對(duì)四條邊上所有點(diǎn)都進(jìn)行過這個(gè)步驟后,矩陣內(nèi)剩余的就是被包圍的。 Surrounded Regions Given a 2D board containing X and O, capture all regionssurrounded by X. A region i...
摘要:不得不說,對(duì)于這道題而言,是一種很木訥的模板。主函數(shù)按矩陣大小建立一個(gè)類進(jìn)行后續(xù)操作一個(gè)結(jié)點(diǎn)用來(lái)連接邊角不可能被圍繞的一個(gè)函數(shù)對(duì)矩陣元素進(jìn)行結(jié)點(diǎn)線性化。同理,,,在主函數(shù)中初始化后調(diào)用。 Surrounded Regions Problem Given a 2D board containing X and O (the letter O), capture all regions s...
摘要:并查集包括查詢和聯(lián)合,主要使用不相交集合查詢主要是用來(lái)決定不同的成員是否在一個(gè)子集合之內(nèi)聯(lián)合主要是用來(lái)把多個(gè)子集合成一個(gè)集合的實(shí)際運(yùn)用計(jì)算機(jī)網(wǎng)絡(luò)檢查集群是否聯(lián)通電路板檢查不同的電路元件是否聯(lián)通初始化聯(lián)通與檢測(cè)與是否聯(lián)通返回聯(lián)通的數(shù) 并查集(Union-Find)包括查詢(Find)和聯(lián)合(Union),主要使用不相交集合(Disjoint-Sets)查詢(Find)主要是用來(lái)決定不同的...
摘要:看個(gè)問題此時(shí)的值是什么呢帶著這樣的疑問,開始今天的話題的那些事。問題分析為什么會(huì)有這個(gè)問題呢上周在項(xiàng)目中,會(huì)對(duì)頁(yè)面標(biāo)簽綁定些事件,會(huì)用到內(nèi)容。總結(jié)寫在最后,對(duì)于的事情還不完整,歡迎補(bǔ)充補(bǔ)充。 看個(gè)問題test,此時(shí)href的值是什么呢?帶著這樣的疑問,開始今天的話題‘href的那些事’。 問題分析 為什么會(huì)有這個(gè)問題呢?上周在項(xiàng)目中,msui會(huì)對(duì)頁(yè)面a標(biāo)簽綁定些事件,會(huì)用到href內(nèi)容...
閱讀 3201·2021-09-22 15:05
閱讀 2760·2019-08-30 15:56
閱讀 1068·2019-08-29 17:09
閱讀 802·2019-08-29 15:12
閱讀 2084·2019-08-26 11:55
閱讀 3062·2019-08-26 11:52
閱讀 3378·2019-08-26 10:29
閱讀 1384·2019-08-23 17:19