螺旋矩陣你聽過?
- 2019 年 10 月 5 日
- 筆記

leetcode爬登之旅(18)
【今日知圖】
螢幕移動
ctrl+b 向上翻頁 ctrl+f 向下翻頁 H Head 螢幕頂部 M Middle 螢幕中間 L Low 螢幕底部
0.說在前面1.螺旋矩陣2.作者的話
0.說在前面
昨天滿課,我還是堅持來刷題了,寫文時間是晚上10點45,刷題時間是10點,今日題目leetcode上的螺旋矩陣,這道題思路簡單,實現困難,,對於考研的同學建議仔細看看,因為我們考研複試考了的。。。
演算法分析及演算法實現及演算法思路是很重要的,每周兩篇演算法三部曲,你們堅持下來了?我現在堅持到第18篇了,哈哈,一起堅持下去!
下面一起來分析!
1.螺旋矩陣
題目
給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。
示例 1:
輸入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 輸出: [1,2,3,6,9,8,7,4,5]
示例 2:
輸入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 輸出: [1,2,3,4,8,12,11,10,9,5,6,7]
思路
先從左往右移動,再從上到下移動,再從右向左移動,再從下到上移動。
分為以上四部分,也就是程式碼需要實現上述四個流程即可~~
最後發現自己寫的程式碼太爛了,然後學習了一下網上的風格~,修改後如下面實現部分~
實現
class Solution: def spiralOrder(self, matrix): """ :type matrix: List[List[int]] :rtype: List[int] """ if not matrix: return [] # 最終結果 output_list = [] # 行index down = len(matrix) - 1 # 列index right = len(matrix[0]) - 1 left = 0 # 左邊 up = 0 # 上邊 while left <= right and up <= down: # 左到右 i = left while True: if i > right: break output_list.append(matrix[up][i]) i += 1 # 行下移 up += 1 # 上到下 j = up while True: if j > down: break output_list.append(matrix[j][right]) j += 1 # 列左移 right -= 1 # 右到左 p = right if (up <= down): while True: if p < left: break # print(matrix[down][p]) output_list.append(matrix[down][p]) p -= 1 # print("----------") # 行上移 down -= 1 # 下到上 q = down if (left <= right): while True: if q < up: break output_list.append(matrix[q][left]) q -= 1 left += 1 return output_list
分析
時間複雜度:O(n^2),空間複雜度:O(n)
擊敗人數:82.62%,耗時44ms
學習文章 https://blog.csdn.net/acttell/article/details/80789299