给定一个m x n大小的整数矩阵(m行,n列),按顺时针螺旋的顺序打印矩阵中的所有元素。 例如一个3 x 3 的 矩阵: 1 2 3 4 5 6 7 8 9 输出应为: 1 2 3 6 9 8 7 4 5
时间: 2024-11-13 12:39:15 浏览: 11
螺旋阵,请设计算法完成螺旋阵的输出,具有要求为:输入一个m行n列的矩阵,按顺时针螺旋顺序输出矩阵中的所有元素
顺时针螺旋打印矩阵是一个常见的编程题目,通常通过四个指针控制当前访问的区域边界,并逐次向内移动。以下是解决这个问题的一种通用步骤:
1. 定义两个指针 `top` 和 `bottom` 分别表示矩阵的上边界和下边界;
2. 同样定义 `left` 和 `right` 指针分别表示左边界和右边界;
3. 初始化它们的位置,`top = 0`, `bottom = m - 1`, `left = 0`, `right = n - 1`;
4. 创建一个结果列表或数组,用于存储打印的元素;
5. 当所有指针都不超过边界时,进入循环:
a. 从 `top` 到 `right`,将每个元素添加到结果列表中,并更新 `top` 和 `right`;
b. 从 `right` 到 `bottom`,同样将元素添加并更新 `right` 和 `bottom`;
c. 从 `bottom` 到 `left`,将元素添加并更新 `bottom` 和 `left`;
d. 最后,从 `left` 到 `top`,将元素添加并更新 `left`;
e. 以上四个步骤称为一次螺旋步,每完成一次就将内部指针向中心靠近一步。
6. 循环直到所有指针都越过边界。
一个Python示例代码如下:
```python
def spiralPrint(m, n, matrix):
result = []
top, bottom, left, right = 0, m - 1, 0, n - 1
while top <= bottom and left <= right:
# 顺时针第一层
for i in range(left, right + 1):
result.append(matrix[top][i])
top += 1
# 顺时针第二层
for i in range(top, bottom + 1):
result.append(matrix[i][right])
right -= 1
# 顺时针第三层 (如果存在)
if top <= bottom:
for i in range(right, left - 1, -1):
result.append(matrix[bottom][i])
bottom -= 1
# 顺时针第四层 (如果存在)
if left <= right:
for i in range(bottom, top, -1):
result.append(matrix[i][left])
left += 1
return result
# 测试上述函数
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(spiralPrint(3, 3, matrix)) # 输出: [1, 2, 3, 6, 9, 8, 7, 4, 5]
```
阅读全文