顺(逆)时针打印矩阵
程序员文章站
2022-06-22 23:09:08
顺时针打印矩阵剑指 Offer 29. 顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]解决方法先把最前面的元素提取了。然后将剩下元素逆时针旋转 90 度,再依次循环进行。逆时针:竖排提取 → 元素翻转 。def spiralOrder(self, matrix: List[List[int]]) -> List[int]:...
顺时针打印矩阵
剑指 Offer 29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
解决方法
先把最前面的元素提取了。然后将剩下元素逆时针旋转 90 度,再依次循环进行。
逆时针:竖排提取 → 元素翻转 。
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
while matrix:
res += matrix.pop(0) # 列表后面可以追加元组,相当于 extend
# res.extend(matrix.pop(0)) # 使用这一句代替上面也行
# res = res + matrix.pop(0) # 列表却不可以连接元组 错误
matrix = list(zip(*matrix))[::-1]
return res
其中,matrix.pop(0)
是元组类型,追加 +=
到了列表之后。使用连接(concatenate)+
会报错的。
这一点微妙之处,也能看出 Python 实在是很灵活。
例如:
a = [1, 2, 4]
a += {5, 6, 7}
a += 8, 9
print(a)
结果:[1, 2, 4, 5, 6, 7, 8, 9]
扩展:逆时针打印矩阵
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
matrix = list(zip(*matrix)) # 转置
res = list(matrix.pop(0))
while matrix:
matrix = list(zip(*matrix))[::-1]
res += matrix.pop(0)
return res
需要先转置提取,才能逆时针旋转,并提取元素。
总结
要求格式为:List[List[int]
- 顺时针旋转 90 度:
list(map(list, zip(*(matrix[::-1]))))
- 逆时针旋转 90 度:
list(map(list, zip(*matrix))))[::-1]
- 转置:
list(map(list, zip(*matrix))))
注意:Python
语法比较简洁,其中上面语法就涉及到:反序、解包、打包、映射等,若看不懂可以在纸上画画,好好理解一下。
转置完再翻转就是逆时针,而翻转完再转置就是顺时针旋转了。
本文地址:https://blog.csdn.net/weixin_43932942/article/details/107886072