《苦练算法》-剑指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
继续重复上述操作即可。
很好理解也很好实现,代码如下:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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
相关文章推荐
- 《苦练算法》-剑指Offer- 二十、顺时针打印矩阵 -python编写
- 《苦练算法》-剑指Offer- 二十二、从上往下打印二叉树 -python编写
- 《苦练算法》-剑指Offer- 三、 从尾到头打印链表 -python编写
- 剑指offer 面试题20 顺时针打印矩阵
- 剑指offer面试题20 顺时针打印矩阵
- Java 剑指offer_面试题20_顺时针打印矩阵(思路在一步步分解之中)
- 剑指offer_数组---顺时针打印矩阵
- 《苦练算法》-剑指Offer- 七、 斐波那契数列 -python编写
- 剑指Offer--020-顺时针打印矩阵(蛇形打印矩阵)
- 《苦练算法》-剑指Offer- 十四、 链表中倒数第k个结点 -python/java编写
- (十三)剑指offer之顺时针打印矩阵
- 剑指offer-面试题20-顺时针打印矩阵
- 剑指offer-面试题 20:顺时针打印矩阵
- 剑指Offer面试题20:顺时针打印矩阵 Java实现
- [剑指offer]顺时针打印矩阵
- 【剑指offer】面试题29:顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指Offer20:顺时针打印矩阵
- 【剑指Offer】面试题20:顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵