剑指offer(4)顺时针打印矩阵--python

原题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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掉元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值