聲明:
今天是中等題第27道題。給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,傳回矩陣中的所有元素。以下所有代碼經過樓主驗證都能在LeetCode上執行成功,代碼也是借鑒别人的,在文末會附上參考的部落格連結,如果侵犯了部落客的相關權益,請聯系我删除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,傳回矩陣中的所有元素。
示例 1:示例 2:輸入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 輸出: [1,2,3,6,9,8,7,4,5]
輸入: [ [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。設定上下左右4個限制,根據題意順時針周遊,按照左右-上下-右左-下上的順序周遊即可,然後四個限制逐漸向中間靠攏,代碼如下。
執行用時: 40 ms, 在Spiral Matrix的Python3送出中擊敗了99.16% 的使用者
class Solution:
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if not matrix:
return []
m = len(matrix)
n = len(matrix[0])
up, left = 0, 0
right, down = n-1, m-1
res = []
while True: # 别擔心,while循環裡設定了break條件,周遊完畢肯定滿足break條件
for i in range(left,right+1):
res.append(matrix[up][i])
up += 1
if up > down: # 上面的這行已經周遊完畢,up得+1,然後要判斷up有沒有越界,同理,下面3個for循環和if語句也是一樣的
break
for j in range(up,down+1):
res.append(matrix[right][j])
right -= 1
if right < left:
break
for i in range(right,left-1,-1):
res.append(matrix[down][i])
down -= 1
if down < up:
break
for j in range(down,up-1,-1):
res.append(matrix[j][left])
left += 1
if left > right:
break
return res
結尾
解法1:https://www.cnblogs.com/grandyang/p/4362675.html