python

超轻量级php框架startmvc

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

更新时间:2020-08-11 11:42:01 作者:startmvc
今天刷《剑指offer》的时候碰到这样一道题:输入一个矩阵,按照从外向里以顺时针的顺序

今天刷《剑指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

以上这篇Python一行代码解决矩阵旋转的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

Python 矩阵 旋转