当前位置 主页 > 网站技术 > 代码类 >

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

    栏目:代码类 时间:2019-11-30 15:05

    今天刷《剑指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一行代码解决矩阵旋转的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持IIS7站长之家。