LeetCode 130 被圍繞的區域

2021-10-09 04:12:22 字數 1950 閱讀 8240

-.- 這題不會做,記錄下大佬的題解(難度:中等)

給定乙個二維的矩陣,包含 『x』 和 『o』(字母 o)。

找到所有被 『x』 圍繞的區域,並將這些區域裡所有的 『o』 用 『x』 填充。

示例:

x x x x

x o o x

x x o x

x o x x

執行你的函式後,矩陣變為:

x x x x

x x x x

x x x x

x o x x

解釋:

被圍繞的區間不會存在於邊界上,換句話說,任何邊界上的 『o』 都不會被填充為 『x』。 任何不在邊界上,或不與邊界上的 『o』 相連的 『o』 最終都會被填充為 『x』。如果兩個元素在水平或垂直方向相鄰,則稱它們是「相連」的。

本題很明顯是要對陣列中的所有元素進行遍歷,現在的問題是採用何種的遍歷演算法和遍歷方式來幫忙我們找到最快的解題演算法。

假設我們從開頭進行元素的順序遍歷,對字母 o 進行記錄則需要構建二維地圖,清晰表現出各個字母 o 之間的位置關係,然後進行橫向和豎向的遍歷,如果能到達邊界點,則是沒有被包圍的,否則就是被字母x包圍的o。此種方法因為無法確定當前元素是否能遍歷到邊界,因此需要先進行記錄遍歷的元素,再根據遍歷的結果重新對元素進行賦值,比較複雜。

假設我們先找到邊界元素且邊界元素為字母o的位置,從邊界元素出發進行遍歷(橫向和縱向遍歷),能遍歷的字母o元素就是沒有被字母x包圍的元素。由於是根據結果來找元素因此不用進行二次迴圈賦值,比較方便。

進行遍歷的方法,簡單的來說就兩種,一種是dfs,一種是bfs,對於任一種演算法題來說,能用dfs求解,基本也能用bfs演算法求解。

2.1 方法一:深度優先搜尋

class solution 

m = board[0].length;

for (int i = 0; i < n; i++)

for (int i = 1; i < m - 1; i++)

for (int i = 0; i < n; i++) else if (board[i][j] == 'o') }}

}public void dfs(char board, int x, int y)

board[x][y] = 'a';

dfs(board, x + 1, y);

dfs(board, x - 1, y);

dfs(board, x, y + 1);

dfs(board, x, y - 1);

}}

2.2 方法二:廣度優先遍歷

以下方法中關於當前元素的橫向和縱向遍歷的方式,採用了一維陣列來進行路徑的定義,分為x左,x右,y上,y下;

int dx = ;

int dy = ;

for (int i = 0; i < 4; i++)

queue.offer(new int);

}

class solution ;

int dy = ;

public void solve(char board)

int m = board[0].length;

queuequeue = new linkedlist();

for (int i = 0; i < n; i++) );

}if (board[i][m - 1] == 'o') );}}

for (int i = 1; i < m - 1; i++) );

}if (board[n - 1][i] == 'o') );}}

while (!queue.isempty())

queue.offer(new int);}}

for (int i = 0; i < n; i++) else if (board[i][j] == 'o') }}

}}

LeetCode130 被圍繞的區域

給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x解釋 被圍繞的區間不會存在於...

Leetcode130 被圍繞的區域

給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x解釋 被圍繞的區間不會存在於...

leetcode 130被圍繞的區域

給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x解釋 被圍繞的區間不會存在於...