1. 程式人生 > 程式設計 >Python一行程式碼解決矩陣旋轉的問題

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,3],[4,6],[7,9]]
matrix = map(list,zip(*matrix))
print(matrix)
 
>>>[[1,7],[2,8],[3,9]]

矩陣順時針旋轉:先把矩陣上下翻轉,然後在轉置一下

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

矩陣逆時針旋轉:先把矩陣轉置一下,然後在上下翻轉

matrix = [[1,zip(*matrix))[::-1]
print(matrix)
 
>>>[[3,9],[1,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一行程式碼解決矩陣旋轉的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。