剑指offer面试题20----顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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、递归的进行上述1、2操作直至矩阵为空

Python代码如下:

# -*- coding:utf-8 -*-
class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
        ret = []
        while matrix:
            ret.extend(matrix.pop(0))
            if matrix:
                matrix = zip(*matrix)[::-1]
    
        return ret

PS:zip(*matrix) 是一个巧妙的矩阵旋转的写法,可以将矩阵的行变成列,列变成行,[::-1] 可以将矩阵进行颠倒,前后元素反转

你可能感兴趣的:(剑指offer面试题20----顺时针打印矩阵)