被圍繞的區域(力扣第130題)

2021-10-07 09:07:13 字數 1416 閱讀 8078

題目:

給定乙個二維的矩陣,包含'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』都不能填充為『x』,如果單純的去找被圍繞的『o』,且不與邊界「o」相鄰,是比較麻煩的,需要乙個乙個去遍歷內部的元素,尋找連通分量,同時還要保證尋找的連通分量中不能有與邊界「o」相鄰的。那我們就直接去遍歷位於邊界上的元素,凡是遇到值為『o』的元素就開始進行深度優先遍歷,遍歷得到的連通分量都是不能進行x填充的,這裡我們用乙個和board同樣大小的訪問標記陣列去標記被訪問過且值為『o』的元素,這些都是要保持不變的元素。完成所有這些遍歷之後,再對訪問標記陣列進行遍歷,凡是遇到值為『o』同時在訪問標記陣列中對應位置的值為false的元素時,就是要進行填充『x』的元素。

**:

private int row;

private int col;

private int dir;

private boolean isvisited;

public void solve(char board)

dir = new int,,,};

row = board.length;

col = board[0].length;

isvisited = new boolean[row][col];

for (int i = 0; i < row; i++) }}

for (int i = 0; i < isvisited.length; i++) }}

}private void findobydfs(char board, int i, int j)

isvisited[i][j] = true;

for (int ints : dir)

}

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 解釋 被圍繞的區間不會存...

力扣 被圍繞的區域

給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 input output x x x x x x x x x o o x x x x x x x o x x x x x x o x x x o x x 這題很容易理解,只需要從...

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 解釋 被圍繞的區間...