题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.
分析
打印第一行后删掉第一行,然后将矩阵逆时针旋转90度,打印第一行,然后继续删掉,旋转。。。重复这个过程,直到只有一行时,删掉后矩阵为空。详细见代码分析。
代码
# -*- coding:utf-8 -*-
class Solution:
# 逆时针翻转矩阵
def traverse(self, matrix):
row_num = len(matrix) # 取行
col_num = len(matrix[0]) # 取列
traversed = [] #准备空矩阵
# 添加顺序是倒的
for c in range(col_num):
row = []
for r in range(row_num):
row.append(matrix[r][c]) # 取矩阵的每一列
traversed.append(row) # 每一列变成行排列
# 倒转矩阵行
traversed.reverse() # 然后进行顺序反转,这样就实现的矩阵的逆时针旋转
return traversed
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
array = []
while matrix:
for item in matrix[0]: # 取矩阵第一列
array.append(item)
del matrix[0] # 取完后删掉
if len(matrix) == 0: # 直到矩阵空时,停止
break
matrix = self.traverse(matrix) # 第一列删掉后进行矩阵逆时针旋转
return array