<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
有一個矩陣,如何按照從外向裡以順時針的順序依次列印出每一個元素?本文將跟大家分享下這個演演算法,歡迎各位感興趣的開發者閱讀本文。
當我們遇到一個複雜的問題時,可以通過舉例將它畫出來,這樣就可以更直觀的發現規律。那麼我們就先構造一個矩陣出來,如下所示:
const matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16] ];
順時針存取一個矩陣,那麼它的存取過程就如下圖所示:
觀察上圖後,我們可以很明顯的知道可以通過一個迴圈來列印這個矩陣,每次列印矩陣的一個圈,那麼迴圈的終止條件是什麼呢?
接下來,我們就來分析下回圈的終止條件。假設矩陣的行數為rows,列數為cols,列印第一圈的左上角座標是(0,0),第二圈的左上角座標是(1,1),以此類推,我們注意到左上角的座標中,行標與列標總是相同的,於是可以在矩陣中選取左上角為(start,start)的一圈作為我們的分析目標。
我們在來多列舉幾個例子觀察下,例如:
距上所述,我們可以發現:5 > 2 * 2
、6 > 2 * 2
全部成立,於是可以得出讓迴圈終止的條件為:cols > start * 2 && rows > start * 2
。
接下來,我們來分析下如何實現列印一圈,前面的分析中我們已經知道了列印1圈需要4步,即:
每一步我們根據起始座標和終止座標用一個迴圈就能列印出一行或者一列,但是最後一圈有可能退化成只有一行、只有一列,甚至只有一個數位,因此列印這樣的一圈就不再需要四步。可能只需要三步、兩步甚至一步。
我們來分析下每一步的執行條件:
經過上面的分析,我們已經有了縝密的邏輯,接下來我們就可以愉快的進行編碼了,如下所示:
// 順時針列印矩陣 export function PrintMatrix<T>( matrix: Array<Array<T>>, cols: number, rows: number ): void { if (matrix == null || cols == null || rows == null) return; // 圈數 let start = 0; while (cols > start * 2 && rows > start * 2) { // 列印每一圈的資料 PrintMatrixInCircle(matrix, cols, rows, start); start++; } } // 列印矩陣的一圈 function PrintMatrixInCircle<T>( matrix: Array<Array<T>>, cols: number, rows: number, start: number ): void { // 計算當前圈結束點座標(索引從0開始,所以需要-1) // 終止列號 const endX = cols - 1 - start; // 終止行號 const endY = rows - 1 - start; // 從左到右列印一行 for (let i = start; i <= endX; i++) { console.log(matrix[start][i]); } // 從上到下列印一列 if (start < endY) { // 此時: // 最後一列已經在從左到右的列印中讀取了 for (let i = start + 1; i <= endY; i++) { console.log(matrix[i][endX]); } } // 從右到左列印一行 if (start < endX && start < endY) { // 此時: // 最後一列已經在從上到下的列印中讀取了 for (let i = endX - 1; i >= start; i--) { console.log(matrix[endY][i]); } } // 從下到上列印一列 if (start < endX && start < endY - 1) { // 此時: // 最後一列已經在從上到下的列印中讀取了 // 第一列的列印已經在從左到右的列印中讀取了 for (let i = endY - 1; i >= start + 1; i--) { console.log(matrix[i][start]); } } }
我們用前面所舉的例子來驗證下上述程式碼能否正常執行,如下所示:
const matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16] ]; PrintMatrix(matrix, 4, 4);
本文所用程式碼完整版請移步:
以上就是TypeScript順時針列印矩陣實現範例詳解的詳細內容,更多關於TypeScript順時針列印矩陣的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45