给你一个n * n 的二维char数组 内部存的是 'X' 和 'O',形式如下
X X X X X
X O O O X
X X O O X
X X X O X
X O X X X
X X X X X
X O O O X
X X O O X
X X X O X
X O X X X
编写一个函数将被'X'包围的'O'统统变成'X'。 比如下标为 (1,1) (1,2) (1,3) (2,2) (2,3) (3,3)的'O'需要被变成'X',而下标为(4,1)的'O' 不需要变成'X'.
public class Solution {
public static void main(String[] args) {
char[][] ch = {{'X', 'X', 'X', 'X', 'X'}, {'X', 'O', 'O', 'O', 'X'}, {'X', 'X', 'O', 'O', 'X'},
{'X', 'X', 'X', 'O', 'X'}, {'X', 'O', 'X', 'O', 'X'}};
new Solution().convert(ch);
for (int i = 0; i < ch.length; i++) {
for (int j = 0; j < ch[0].length; j++) {
System.out.print(ch[i][j] + " ");
}
System.out.println();
}
}
public void convert(char[][] input) {
boolean[][] visited = new boolean[input.length][input[0].length];
for (int i = 0; i < input.length; i++) {
helper(input, visited, i, 0);
helper(input, visited, i, input[0].length - 1);
}
for (int j = 0; j < input[0].length; j++) {
helper(input, visited, 0, j);
helper(input, visited, input.length - 1, j);
}
//set all unvisited 'O' to 'X'
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input[0].length; j++) {
if (input[i][j] == 'O' && visited[i][j] == false) {
input[i][j] = 'X';
}
}
}
}
public void helper(char[][] input, boolean[][] visited, int i, int j) {
if (i >= 0 && i < input.length && j >= 0 && j < input[0].length && visited[i][j] == false && input[i][j] == 'O') {
visited[i][j] = true;
helper(input, visited, i - 1, j);
helper(input, visited, i + 1, j);
helper(input, visited, i, j - 1);
helper(input, visited, i, j + 1);
}
}
}