剑指Offer [Python] | 19 顺时针打印矩阵
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了剑指Offer [Python] | 19 顺时针打印矩阵,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2106字,纯文字阅读大概需要4分钟。
内容图文
![剑指Offer [Python] | 19 顺时针打印矩阵](/upload/InfoBanner/zyjiaocheng/740/ef3fa18a17b44f87a4fc76414fba31c2.jpg)
「剑指Offer [Python] 」系列博文,「转载」思路详细易懂的、python语言的众大神博文,「整理 & 汇总」各方资料,「学习 & 对比」多种思路。
今天是第19题 —— 顺时针打印矩阵。
?? 「更多题目」
一、题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
二、思路
比较之下,「 jiangjiane」的代码简单、清晰、易理解,我将基于他的代码,「修改」和「解析」思路。
简单地说,
- 创建一个新的空序列,用来存储打印出来的数字;
- 按顺时针分4次取(最上一行、最右一列、最下一行、最左一列);每次取完剩下的矩阵,当作一个新的矩阵,再次循环这个过程。
-
举例
- 输入一个矩阵
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
1 | 2 | 3 | 4 |
---|---|---|---|
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
- 按照顺时针取4次后,即取完「第一轮」后,
- 对于剩下的新矩阵,再循环一次过程。取完「第二轮」的前三步,矩阵就空了,那么停止循环。
三、Python 实现
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
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
四、细节剖析
在我复盘代码的时候,发现了很多细节处,一一弄清楚。
- 1.
matrix.pop(0)
和matrix.pop()
的分别在哪里?
- 2.
matrix.pop(0)
和row.pop(0)
的分别在那里?
- 3.
res += matrix.pop(0)
可以改成res.extend( matrix.pop(0) )
吗?可以改成res.append( matrix.pop(0) )
吗?
- 4.为什么
if matrix and matrix[0]:
中除了限制「剩下的矩阵不为空」,还要限制条件matrix[0]
?为什么有的时候又不需要这个条件
想了好久。
因为,在对列取数的时候,要先对每一行进行循环,取每一行的最后(前)一位数,即是最右(左)边一列数了。所以,不仅要有矩阵,还要保证一定要有行,不能是空的。
「特例」:输入一个矩阵 matrix = [[1],[2],[3],[4],[5]]
1 |
---|
2 |
3 |
4 |
5 |
按照我们的思路:
- 先取第一行,即1;
- 剩下的矩阵
matrix = [[2],[3],[4],[5]]
,再取最右一列,即2,3,4,5; - 这时候就没有行了,只剩下空的矩阵。如果不限制
matrix[0]
,在res.append(row.pop(0))
会报错pop from empty list
。
内容总结
以上是互联网集市为您收集整理的剑指Offer [Python] | 19 顺时针打印矩阵全部内容,希望文章能够帮你解决剑指Offer [Python] | 19 顺时针打印矩阵所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。