130. 被围绕的区域
1. 题目
给你一个 m x n
的矩阵 board
,由若干字符 'X'
和 'O'
,找到所有被 'X'
围绕的区域,并将这些区域里所有的 'O'
用 'X'
填充。
示例 1:
1 | 输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]] |
示例 2:
1 | 输入:board = [["X"]] |
提示:
m == board.length
n == board[i].length
1 <= m, n <= 200
board[i][j]
为'X'
或'O'
2. 思路
已知题目要求将被
X
围绕的区域中的O
统一转换为X
,同时已知题目中共存在以下三种元素:- 字母
X
- 被字母
X
围绕的字母O
- 未被围绕的字母
O
- 字母
根据题目特性,可以得知要达到无法转换字母
O
的条件,仅存在于关联到了边界的字母O
的区域可以避免被围绕基于以上特性,可以将边界关联到的字母
O
区域统一转换为-
符号,关联转换的过程采用DFS深度优先进行完成所有边界关联转化后,字母矩阵中剩余的字符
O
即为需要转化为X
的单元格,随即对剩下的字母O
进行统一转化而面对矩阵中剩下的字符
-
单元格,则是不需要转化的字母O
,将其恢复为字母O
3. 代码
1 | class Solution { |
4. 复杂度
- 时间复杂度:
O(n * m)
- 空间复杂度:
O(n * m)