您的位置:首页 > 编程语言 > Python开发

《苦练算法》-剑指Offer- 十九、顺时针打印矩阵 -python编写

2018-02-05 11:21 369 查看
题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

1 2 3

4 5 6

7 8 9

输出为: 123698745

题目分析

思路一 按照常规操作,此题目应该用循环,找出循环的终止条件,每次走一圈无容置疑,第一步肯定要走的,但是第二步,第三步,第四步要走的条件需要找出来,之后判断循环即可,此方法比较传统,拿出纸自己来一遍更佳但代码量比较多,也比较麻烦,其中一步弄错基本就全错了

思路二

借鉴网上大神的思路

可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作

例如

1 2 3

4 5 6

7 8 9

输出并删除第一行后,再进行一次逆时针旋转,就变成:

6 9

5 8

4 7

继续重复上述操作即可。

很好理解也很好实现,代码如下:

# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
re = []
while(matrix): #循环条件为 矩阵不为空
re.extend(matrix.pop(0)) #将矩阵最上面一行弹出
if not matrix: #弹出第一行之后如果矩阵为空则跳出循环
break
matrix = self.transfrom(matrix) #变换矩阵
return re
def transfrom(self,matrix):
row = len(matrix) #行数
col = len(matrix[0]) #列数
trans1 = []
for i in range(col):
trans0 = []  #这里很关键需要每次记录第一行的数据之后 都赋值为None
for j in range(row):
trans0.append(matrix[j][i]) # 依次取第一列到最后一列
trans1.append(trans0) # 得到的第一行为前面的第一列,第二行为第二列,以此列推
trans1.reverse() # 倒转 矩阵 得到变换矩阵
return trans1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: