在算法题解中,LeetCode 130「被围绕的区域」 是一道经典的矩阵搜索问题,主要考察深度优先搜索(DFS)的应用。本题要求将矩阵中被字符 'X' 完全包围的 'O' 区域替换为 'X',但需保留与边界相连的 'O'。以下从问题分析、解题思路、代码实现到复杂度解析,全面拆解此题。\n\n## 问题剖析\n输入为一个 m x n 的矩阵 board,由 'X' 和 'O' 组成。规则是:任何不在边界上且不与边界 'O' 相连的 'O',都会被替换为 'X'。通俗地讲,只有活在疆域之内(未被边界连通)的 'O' 才需要被蚕食。\n\n## 解题思路:从边界下手逆向标记\n直接判断内部 'O' 是否相连困难,高效方法是从边界的 'O' 出发,标记所有可达的 'O'。这些标记的区域是安全的(不会被替换),而未被标记的 'O' 则陷入包围,应改为 'X'。这个过程分可分为三步:\n\n### 步骤一:以边界点激发 DFS\n遍扫矩阵四条边界线上遇到 'O' 的位置。每个数组元素用 DFS 将自己和相邻的纵向/横向为 'O' 的位置,全部临时标记(比如将该方格置为 '#'),这是在模拟从彼岸切入搜寻活路径。\n\n### 步骤二:全面重设元素\n遍历整个矩阵,逐一检阅:若当前元素还是原始 'O'并且在前一步操作后任是 'O'(没有被边界着陆触达),显示出它是孤立无援的死区,直接将转变填入字母 替换时进行重新赋值操作(改写成'X')同时补读:而对于曾经改成 '#' '待审的忠臣点们恢复原状再转化化为原来写的始坐标采用 -}\n主要码用于覆盖 (先将两类分开快速过一轮规则之后再校对):\n修复手抚把目前全部的 哈希代替权\