网络编程
位置:首页>> 网络编程>> Python编程>> Python一行代码解决矩阵旋转的问题

Python一行代码解决矩阵旋转的问题

作者:Jason_Bourne_  发布时间:2022-03-08 12:44:11 

标签: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.

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


1 2 3
4 5 6
7 8 9

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


6 9
5 8
4 7

然后,继续重复上述操作即可。

最主要的在于实现矩阵的逆时针操作。关于矩阵的旋转有好几种,转置、顺时针、逆时针,下面直接上代码,用一行python代码实现这三种操作。

矩阵转置:


matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix = map(list, zip(*matrix))
print(matrix)

>>>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

矩阵顺时针旋转:先把矩阵上下翻转,然后在转置一下


matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix[::-1]))
print(matrix)

>>>[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

矩阵逆时针旋转:先把矩阵转置一下,然后在上下翻转


matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix))[::-1]
print(matrix)

>>>[[3, 6, 9], [2, 5, 8], [1, 4, 7]]

下面是完整的解题代码:


# -*- coding:utf-8 -*-
class Solution:
 # matrix类型为二维列表,需要返回列表
 def printMatrix(self, matrix):
   # write code here
   result = []
   while(matrix):
     result += matrix.pop(0)
     if not matrix or not matrix[0]:
       break
     # 将矩阵逆时针旋转
     matrix[:] = map(list, zip(*matrix))[::-1]
   return result

来源:https://blog.csdn.net/Sun_Hui_/article/details/81298544

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com