题目
输入一个矩阵,按照从外向里以顺时针的顺序依次,打印出每一个数字。
例:
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
思路
- 按照书上的思路,每次打印一圈,一圈中又分为上右下左四条边,每一步打印前都做判断,是否打印。当打印圈的起点超过。
- 时间复杂度:O(n)
- 空间复杂度:O(1)
- 建立一个打印队列,可以发现打印的元素规律为,未打印矩阵的【第1行,列递增】,【最后1列,行递增】,【最后1行,列递减】,【第一列,行递减】。每次打印完行/列,就将其从未打印的队列中剔除,避免重复。
- 时间复杂度:O(n)
- 空间复杂度:O(n) 列表大小。
代码
思路1:时间复杂度:O(n),空间复杂度:O(1)
def print_matrix(matrix):
"""
:param matrix:print_matrix
:return:None
"""
if not matrix:
return None
start = 0
row = len(matrix)
col = len(matrix[0])
while row > start * 2 and col > start * 2:
# one round
col_end = col - start - 1
row_end = row - start - 1
for j in range(start, col_end+1):
print(mat