題目:
給定乙個二維的矩陣,包含'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 解釋 被圍繞的區間...