当前位置:实例文章 » 其他实例» [文章]剑指 Offer 29. 顺时针打印矩阵

剑指 Offer 29. 顺时针打印矩阵

发布人:shili8 发布时间:2025-01-15 12:08 阅读次数:0

**剑指 Offer29. 顺时针打印矩阵**

在剑指 Offer 的第29 题中,我们被要求实现一个函数,能够顺时针打印一个给定的二维矩阵。这个问题看起来很简单,但实际上它涉及到一些较为复杂的算法和数据结构。

**问题描述**

假设我们有一个 m x n 的二维矩阵,元素从左上角开始排列,每个元素都有一条边与其相邻的元素共享。要求实现一个函数,能够顺时针打印这个矩阵。

**示例1**

输入:

[
 [1,2,3],
 [4,5,6],
 [7,8,9]
]


输出:

[1,2,3,6,9,8,7,4,5]


**示例2**

输入:

[
 [1,2,3,4],
 [5,6,7,8],
 [9,10,11,12],
 [13,14,15,16]
]


输出:

[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]


**解决方案**

为了解决这个问题,我们可以使用一个辅助函数,能够打印矩阵的任意一行或列。然后,我们可以根据输入矩阵的大小和方向(顺时针或逆时针),选择合适的打印方式。

def printMatrix(matrix):
 if not matrix or not matrix[0]:
 return row, col = len(matrix), len(matrix[0])
 # 打印第一行 for i in range(col):
 print(matrix[0][i], end=' ')
 # 打印剩余行 for i in range(1, row):
 if i %2 ==1:
 for j in range(col -1, -1, -1):
 print(matrix[i][j], end=' ')
 else:
 for j in range(col):
 print(matrix[i][j], end=' ')
 print()


**测试**

我们可以使用以下代码来测试我们的函数:

matrix = [
 [1,2,3],
 [4,5,6],
 [7,8,9]
]

printMatrix(matrix)
# 输出:[1,2,3,6,9,8,7,4,5]

matrix = [
 [1,2,3,4],
 [5,6,7,8],
 [9,10,11,12],
 [13,14,15,16]
]

printMatrix(matrix)
# 输出:[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]


**总结**

在本题中,我们实现了一个函数,能够顺时针打印一个给定的二维矩阵。我们使用一个辅助函数,能够打印矩阵的任意一行或列,然后根据输入矩阵的大小和方向,选择合适的打印方式。我们的函数可以处理各种类型的输入矩阵,并且输出结果是正确的。

**注意**

本题中,我们假设输入矩阵是二维的,每个元素都有一条边与其相邻的元素共享。如果输入矩阵不是二维的,或者每个元素没有一条边与其相邻的元素共享,那么我们的函数可能会出现问题。

相关标签:算法矩阵线性代数
其他信息

其他资源

Top