题目描述
给定一个二维的矩阵,包含 'X'
和 'O'
(字母 O)。
找到所有被 'X'
围绕的区域,并将这些区域里所有的 'O'
用 'X'
填充。
示例:
1 | X X X X |
运行你的函数后,矩阵变为:
1 | X X X X |
被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。
题解
DFS + 递归
这道题与岛屿问题很相似, 但是要考虑边界问题, 而且边界问题要在填充操作之前考虑.
所以思路为:
- 先在边界上寻找所有的’O’, 并把它所连接的所有’O’都先标记为’#’, 表示不能转换成’X’
- 遍历整个二位数组, 此时再遍历的话所有的’O’就都是可以被转换的字符了, 然后把’#’再变回来
1 | public class lc130 { |
BFS
在广度优先遍历的基础上, 使用队列结构, 将每个符合条件的位置都入队
1 | class Solution { |