0
点赞
收藏
分享

微信扫一扫

go语言刷题:130. 被围绕的区域

大明宫 2022-04-08 阅读 57
golang

给你一个 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)
		}
	}
}

举报

相关推荐

0 条评论