這是我曾經遇到過的面試題,在 LeetCode 上找到了題目的原型,難度中等。題目描述如下:
給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,傳回矩陣中的所有元素。
示例 1:
示例 2:
這是一道難度中等的題目,但是第一次看到題目時還是有一些困惑,不過仔細分析後很容易找到思路。比較直覺的思路是逐層法,從外向内循環每一層。其中單層循環的方法也有很多,我使用了插入法循環每一層。以下是 4X4 矩陣循環的步驟:
通過以上步驟拆分,可以看到輸出螺旋矩陣還是比較容易的,以下是具體的 JS 代碼。
以上程式的運作時間大約在 60 ms 左右,超過所有送出答案的五成,中規中矩吧,距離最優算法還有一定差距。
LeetCode 原站給出了這道題的解題思路及代碼,中文站則沒有。官方介紹了兩種方法,一種是模拟法,另一種是逐層法,其中逐層法的思路和我的思路是相同的,不過單層循環的方法不同。對于二維矩陣的題目,我最先想到的也是模拟法,也就是模拟行走路線及方向,但是因為判斷條件有點複雜而放棄了。具體實作可以看官網文章 https://leetcode.com/articles/spiral-matrix/,以下是兩種方法的 python 實作,因時間關系,我就不寫 JS 版本了,後續有時間再補上,感興趣的博友可以自己轉換。
1、模拟法
2、逐層法
感謝您的閱讀,如果您對我的文章感興趣,可以關注我的部落格,我是叙帝利,下篇文章再見!
開發低代碼平台的必備拖拽庫 https://github.com/ng-dnd/ng-dnd
基于 Angular Material 的中背景管理架構 https://github.com/ng-matero/ng-matero
Angular Material Extensions 擴充元件庫 https://github.com/ng-matero/extensions
仿 Windows 照片檢視器插件 https://github.com/nzbin/photoviewer
仿 Windows 照片檢視器插件 jQuery 版 https://github.com/nzbin/magnify
完美替代 jQuery 的子產品化 DOM 庫 https://github.com/nzbin/domq
簡化類名的輕量級 CSS 架構 https://github.com/nzbin/snack
與任意 UI 架構搭配使用的通用輔助類 https://github.com/nzbin/snack-helper
單元素純 CSS 加載動畫 https://github.com/nzbin/three-dots
有趣的 jQuery 卡片抽獎插件 https://github.com/nzbin/CardShow
懸疑科幻電影推薦 https://github.com/nzbin/movie-gallery
鍛煉記憶力的小程式 https://github.com/nzbin/memory-stake