【Python学习-数组】【剑指offer】之顺时针打印矩阵

【Python学习-数组】【剑指offer】之顺时针打印矩阵

题目

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值