【LeetCode】被围绕的区域 Java 题解
题目描述
给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。
复制代码
思路分析
今天的算法每日一题是被围绕的区域,单看题目描述,不容易理解。一般遇到这种情况的时候,我们可以借助示例理解题目。
示例 1 解释明确指出了被围绕的区间不会存在于边界上,换句话说,**任何边界上的 'O' 都不会被填充为 'X'。**根据这个条件,先找到边界上的 'O', 与他相邻的 O 都不可以被替换,其他的 O 是可以替换的。
理解了含义题目之后, 是搜索题目。我们一般使用 DFS 的方式解决。DFS 全称是 Depth First Search,中文名是深度优先搜索。在这里也就是利用递归函数实现的朴素枚举算法。我们先找到边界的 O,然后比较为 A。接着以 A 的位置,找上下左右的关联节点,统一标记为 A。当边界的 O 以及 O 的相连都标记完成之后。我们最后统一遍历 board,将 A 还原为 0, 将无关联的 O 变成 X。
具体实现代码如下, 供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(m * n), 空间复杂度是 O(1)。
在实现 DFS 搜索的时候,我们可以总结一下方向变量,递归终止条件的使用,提升解题效率。
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/f7a33181280a7420740dba20c】。文章转载请联系作者。
评论