前言
就如同標(biāo)題一樣,這篇文章將會(huì)靈活的運(yùn)行Array對(duì)象的一些方法來實(shí)現(xiàn)看上去較復(fù)雜的應(yīng)用。
大家都知道Array實(shí)例有這四個(gè)方法:push、pop、shift、unshift。大家也都知道 push + pop實(shí)現(xiàn)棧, shift + push實(shí)現(xiàn)隊(duì)列。在這里不討論什么先進(jìn)后出、先進(jìn)先出。但一面這個(gè)題將要用到這幾個(gè)方法。
題目
螺旋矩陣這個(gè)名詞,在后臺(tái)語言中可能很熟悉,他是個(gè)二維數(shù)組,他有什么特點(diǎn)呢?請(qǐng)看下圖:
以上是一個(gè)從外到內(nèi)的螺旋矩陣,他的排列規(guī)則是從外圍開始走,一圈一圈繞道最里面,就像一條盤旋著的蛇。
分析與解答
進(jìn)入正題,今年9月份騰訊校招在線筆試題就有一個(gè)螺旋矩陣的 題,傳入給定數(shù)字n,打印出n*n的螺旋矩陣,當(dāng)時(shí)本菜鳥并沒有做出來,時(shí)間過后自己在電腦上想,然后恍然大悟明白的其中的奧妙。
雖然博主沒有記錄當(dāng)時(shí)的代碼,但是我是首先定義了個(gè)n*n的二維數(shù)組,得到需要繞幾層,比如上面的是2層,然后就循環(huán)幾次,在內(nèi)部用四個(gè)for循環(huán),分別是上下左右給定義的二維數(shù)組插內(nèi)容,具體的代碼就沒法上了,反正方法很笨,而且并不是本文章的重點(diǎn),下面進(jìn)入本章主題:
前幾天我在codewars上做題,遇到了個(gè)螺旋矩陣的題,它是要求寫一個(gè)函數(shù),給定一個(gè)矩陣二維數(shù)組參數(shù),返回一個(gè)數(shù)組,該數(shù)組的元素順序就是螺旋矩陣的路徑。
例如:
function getLinear (spiral) { //...做一些操作 }var arr = [ [1,2,3], [4,5,6], [7,8,9] ] getLinear(arr) // 返回 [1,2,3,6,9,8,7,4,