【一天一道Leetcode】螺旋矩陣

本篇推文共計2000個字,閱讀時間約3分鐘。
01
題目描述

題目描述:
給你一個m行n列的矩陣matrix,
請按照順時針螺旋順序,返回矩陣中的所有元素。
如下面的示例:

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[1,2,3,6,9,8,7,4,5]
輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
輸出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:
1. m == matrix.length
2. n == matrix[i].length
3. 1 <= m, n <= 10
4. -100 <= matrix[i][j] <= 100
02
方法和思路
由題意可知,整個矩陣需要螺旋打開,
更直白的表述可以說像現實中的蛋糕卷一樣,
進行平鋪展開。

這個過程中最難的是需要讓矩陣判斷出90度的拐角,
碰到90度拐角的時候,進行旋轉90度操作。

這個時候不得不提到Python的zip內置函數:
zip()函數用于將可迭代的對象作為參數,將對象中對應的元素打包成元組,然后返回由這些元組的對象,這樣做的好處是節(jié)約了不少的內存。
我們可以使用list()轉換來輸出列表。
利用*號操作符,可以將元組解壓為列表。
簡單點來說,zip函數可以實現矩陣轉置的功能。
例如下面的這個案例:
input=[(1,2,3), (4,5,6), (7,8,9)]
print("原始數組輸入:",input)
print("轉置數組輸出:",list(zip(*input)))輸出為:


另外一方面:
matrix[::-1]可以實現矩陣繞水平對稱軸做對稱操作,
例如下面的這個案例:
input=[(1,2,3), (4,5,6), (7,8,9)]
output=input[::-1]
print("原始數組輸入:",input)
print("對稱數組輸出:",output)輸出為:


我們發(fā)現zip內置函數加matrix[::-1]對稱,
兩個操作加起來就是順時針轉90度。
例如下面的這個案例:
input=[(1,2,3), (4,5,6), (7,8,9)]
output=list(zip(*input))[::-1]
print("原始數組輸入:",input)
print("對稱數組輸出:",output)輸出為:

結合矩陣圖,我們可以看到:

zip內置函數加matrix[::-1]對稱,
可以實現順時針旋轉90度。

通過上述方法,就處理好了順時針90度旋轉的問題。
同時新建一個新數組,
用于存儲經過順時針90度旋轉得到的數。
最后矩陣展開的最后結果就是新數組的輸出。

我們用代碼表示此題的解法如下:
class Solution(object):
def spiralOrder(self, matrix):
new=[]
while matrix:
new+=matrix[0]
matrix=list(zip(*(matrix[1:])))[::-1]
return new
【年終總結】你好2021,再見2020。

【快速寫好畢業(yè)論文】你不得不知曉的七個常用文獻搜索平臺

【秋招紀實錄】一篇特別正經的【騰訊】求職經驗分享

【一天一道Leetcode】回文字符串-最少分割次數

【一天一道Leetcode】合并兩個有序鏈表

【一天一道Leetcode】套信封問題
你與世界
只差一個
公眾號

