天天看點

使用 JS 輸出螺旋矩陣

這是我曾經遇到過的面試題,在 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