原题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
以
1 2 3 4
5 6 7 8
1 2 3 4
5 6 7 8
举例。
思想是,定义一个循环,在矩阵不为空时,一圈一圈的输出。把输出过的元素都从矩阵中剔除,以便进行下一轮的循环。
解决第一圈1234848765151的输出:
(1)上边行,直接从矩阵中pop出来;
(2)右边列,先将矩阵行倒置,再依次pop每一行的最后一位;
(3)下边行,先从矩阵pop出来后,再倒置;
(4)左边行,和(2)类似,先倒置,再pop第一个数。
在执行循环之前,首先应该给出循环条件,显而易见,循环的条件即为矩阵不为空。
最后直接贴出来牛客网上华科平凡大佬的代码
class Solution:
def printMatrix(self, matrix):
res = []
while matrix:
res += matrix.pop(0)
if matrix and matrix[0]:
for row in matrix:
res.append(row.pop())
if matrix:
res += matrix.pop()[::-1]
if matrix and matrix[0]:
for row in matrix[::-1]:
res.append(row.pop(0))
return res
注意,在matrix中取row,在row里pop掉元素时,matrix也会pop掉元素。