将n行m列矩阵,顺时针旋转后,输出
时间: 2024-05-03 22:16:50 浏览: 74
可以使用一个辅助矩阵来存储旋转后的结果,具体步骤如下:
1. 创建一个n行m列的辅助矩阵,并将所有元素初始化为0。
2. 定义四个变量,分别表示当前旋转的起始行和列以及结束行和列,初始值为0和m-1和n-1和0。
3. 从左到右遍历第一行,将原矩阵中的元素依次赋值给辅助矩阵中的第一行元素。
4. 将结束行的值减1,表示第一行已经遍历完毕,下一次遍历将从第二行开始。
5. 从上到下遍历最后一列,将原矩阵中的元素依次赋值给辅助矩阵中的最后一列元素。
6. 将结束列的值减1,表示最后一列已经遍历完毕,下一次遍历将从倒数第二列开始。
7. 如果当前的起始行小于等于结束行,继续从右到左遍历最后一行,将原矩阵中的元素依次赋值给辅助矩阵中的倒数第一行元素。
8. 将结束行的值减1,表示最后一行已经遍历完毕,下一次遍历将从倒数第二行开始。
9. 如果当前的起始列小于等于结束列,继续从下到上遍历第一列,将原矩阵中的元素依次赋值给辅助矩阵中的第一列元素。
10. 将起始列的值加1,表示第一列已经遍历完毕,下一次遍历将从第二列开始。
11. 重复步骤3到步骤10,直到辅助矩阵中的所有元素都被赋值为止。
12. 将辅助矩阵输出即可。
下面是一个Python实现的示例代码:
```python
def rotate_matrix(matrix):
n, m = len(matrix), len(matrix[0])
result = [[0] * m for _ in range(n)]
start_row, end_row, start_col, end_col = 0, n - 1, 0, m - 1
while start_row <= end_row and start_col <= end_col:
# Traverse from left to right
for j in range(start_col, end_col + 1):
result[start_row][j] = matrix[start_row][j]
start_row += 1
# Traverse from top to bottom
for i in range(start_row, end_row + 1):
result[i][end_col] = matrix[i][end_col]
end_col -= 1
# Traverse from right to left
if start_row <= end_row:
for j in range(end_col, start_col - 1, -1):
result[end_row][j] = matrix[end_row][j]
end_row -= 1
# Traverse from bottom to top
if start_col <= end_col:
for i in range(end_row, start_row - 1, -1):
result[i][start_col] = matrix[i][start_col]
start_col += 1
return result
# Example usage
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
rotated_matrix = rotate_matrix(matrix)
print(rotated_matrix)
# Output: [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
```
阅读全文