给出一个由‘O’和‘X’组成的矩阵,在矩阵中的所有‘X’所在的行、列都需要变成‘O’。 如果在矩阵边界上的‘O’所在的行、列被‘X’包围,则这些‘O’也需要变成‘X’。 样例: 输入: [ ["X","X","X","X"], ["X","O","O","X"], ["X","X","O","X"], ["X","O","X","X"] ] 输出: [ ["X","X","X","X"], ["X","X","X","X"], ["X","X","X","X"], ["X","O","X","X"] ] ,代码注释
时间: 2023-07-07 07:38:49 浏览: 60
好的,这是一个比较经典的矩阵操作问题。以下是用 Python 实现的解答:
```python
def solve(matrix):
if not matrix:
return
# 获取矩阵的行数和列数
m, n = len(matrix), len(matrix[0])
# 定义一个辅助函数,用于搜索并标记相邻的 'O'
def dfs(i, j):
if i >= m or i < 0 or j >= n or j < 0 or matrix[i][j] != 'O':
return
matrix[i][j] = '#'
dfs(i + 1, j)
dfs(i - 1, j)
dfs(i, j + 1)
dfs(i, j - 1)
# 遍历第一列和最后一列,将与 'O' 相邻的位置标记为 '#'
for i in range(m):
dfs(i, 0)
dfs(i, n - 1)
# 遍历第一行和最后一行,将与 'O' 相邻的位置标记为 '#'
for j in range(n):
dfs(0, j)
dfs(m - 1, j)
# 将所有未被标记的 'O' 修改为 'X',将标记过的 '#' 修改回 'O'
for i in range(m):
for j in range(n):
if matrix[i][j] == 'O':
matrix[i][j] = 'X'
elif matrix[i][j] == '#':
matrix[i][j] = 'O'
```
这个算法的时间复杂度为 $O(mn)$,其中 $m$ 和 $n$ 分别是矩阵的行数和列数。
阅读全文