给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
示例 1:
示例 2:
代码:
func solve(board [][]byte) {
for i := range board {
for j := range board[i] { //遍历矩阵中的所有元素
if i == 0 || i == len(board)-1 || j == 0 || j == len(board[i])-1 { //如果该点在矩阵的边界上
if board[i][j] == 'O' { //如果该点坐标的值为0
dfs(i, j, board)
}
}
}
}
for i := range board {
for j := range board[i] { //再次遍历矩阵中所有的元素
if board[i][j] == '*' { //将所有和边界相通的边界恢复成0
board[i][j] = 'O'
} else if board[i][j] == 'O' { //将其他的0填充
board[i][j] = 'X'
}
}
}
}
func dfs(i, j int, board [][]byte) {
var direction = [][]int{ //初始化搜索方向
{-1, 0},
{0, 1},
{1, 0},
{0, -1},
}
if i < 0 || i > len(board)-1 || j < 0 || j > len(board[i])-1 { //如果该点的位置超出矩阵范围则返回
return
}
if board[i][j] == 'O' { //如果该点的值为0
board[i][j] = '*' //将该点填充
for k := 0; k < 4; k++ { //遍历该点的四个方向,继续搜索和填充
dfs130(i+direction[k][0], j+direction[k][1], board)
}
}
}