二维数组元素变化pta
时间: 2025-02-14 18:16:11 浏览: 36
### 关于二维数组元素变化的PTA题解
#### 题目描述
在一个给定的 \( n \times m \) 的二维数组中,需要实现特定的操作来改变某些元素的位置或值。这类题目通常涉及矩阵转置、旋转、翻转或其他形式的数据变换。
#### 示例:矩阵顺时针旋转90度
对于一个 \( n \times m \) 的矩阵,将其顺时针方向旋转 90 度后的结果是一个新的 \( m \times n \) 矩阵,在新矩阵中的位置 (r,c) 对应原矩阵中的位置 (c,n-r-1)。
```python
def rotate_matrix(matrix):
if not matrix or not matrix[0]:
return []
rows = len(matrix)
cols = len(matrix[0])
result = [[0] * rows for _ in range(cols)]
for r in range(rows):
for c in range(cols):
result[c][rows - r - 1] = matrix[r][c]
return result
```
此代码实现了将任意大小的矩形矩阵按顺时针方向旋转 90 度的功能[^1]。
#### 示例:上下翻转矩阵
另一个常见的操作是对矩阵进行上下翻转,即将第 i 行与第 (n-i-1) 行交换:
```python
def flip_up_down(matrix):
top, bottom = 0, len(matrix)-1
while top < bottom:
matrix[top], matrix[bottom] = matrix[bottom], matrix[top]
top += 1
bottom -= 1
return matrix
```
这段代码展示了如何通过简单的索引互换来完成矩阵的上下翻转操作[^2]。
#### 示例:主副对角线镜像反转
有时也需要沿着主对角线(左上到右下)或者次对角线(右上到左下)做镜像反射处理:
```python
def mirror_diagonal(matrix, main=True):
size = len(matrix)
for row in range(size):
for col in range(row + int(not main), size-int(main)+int(not main)):
if main:
matrix[row][col], matrix[col][row] = matrix[col][row], matrix[row][col]
else:
matrix[row][size-col-1], matrix[size-row-1][col] = matrix[size-row-1][col], matrix[row][size-col-1]
return matrix
```
上述函数可以接受参数 `main` 来决定是沿主对角线还是次对角线执行镜像转换[^3]。
阅读全文
相关推荐

















