JavaScript實現方陣元素螺旋排列
本題旨在利用 JavaScript 功能實現方陣元素的螺旋排列。JavaScript 中有多種方法可以完成此任務。
理解題意
題目要求編寫一個 JavaScript 函式,輸出方陣元素的螺旋排列結果。例如,對於二維矩陣 [1,2] [3,4],如果按順時針方向螺旋排列元素,則輸出陣列將為 [1,2,4,3]。
問題的邏輯
程式碼將實現一個函式來完成此任務。此函式將接收一個需要轉換為螺旋陣列的矩陣作為引數。該函式將把傳入的矩陣轉換為順時針螺旋順序陣列。我們將透過維護四個變數來實現此過程。這些變數將分別表示矩陣的邊界:起始行 `rowStart`,結束行 `rowEnd`,起始列 `colStart` 和結束列 `colEnd`。在函式內部,我們將迭代矩陣元素並將元素推入結果陣列。
演算法
步驟 1 − 宣告一個名為 `spiralElements` 的函式,該函式使用矩陣引數。
步驟 2 − 定義所需變數。一個結果陣列,用於儲存結果陣列。然後是行和列的起始點和結束點,分別命名為 `rowStart`、`rowEnd`、`colStart` 和 `colEnd`。
步驟 3 − 使用 `while` 迴圈進行迴圈,並執行此迴圈,直到起始點小於結束點。
步驟 4 − 在此迴圈內部,我們將依次遍歷這些元素,方向為右、下、左、上。
步驟 5 − 返回給定矩陣的螺旋陣列結果。
演算法程式碼
//function to spiraling the matrix elements
function spiralElements(matrix) {
const result = [];
let rowStart = 0;
let rowEnd = matrix.length - 1;
let colStart = 0;
let colEnd = matrix[0].length - 1;
while (rowStart <= rowEnd && colStart <= colEnd) {
// Traverse right
for (let i = colStart; i <= colEnd; i++) {
result.push(matrix[rowStart][i]);
}
rowStart++;
// Traverse down
for (let i = rowStart; i <= rowEnd; i++) {
result.push(matrix[i][colEnd]);
}
colEnd--;
// Traverse left
if (rowStart <= rowEnd) {
for (let i = colEnd; i >= colStart; i--) {
result.push(matrix[rowEnd][i]);
}
rowEnd--;
}
// Traverse up
if (colStart <= colEnd) {
for (let i = rowEnd; i >= rowStart; i--) {
result.push(matrix[i][colStart]);
}
colStart++;
}
}
return result;
}
const matrix = [ [7, 8, 9], [4, 5, 6], [1, 2, 3] ];
console.log(spiralElements(matrix));
在上面的輸出中,我們可以看到給定方陣元素的螺旋排列。螺旋方向為順時針方向。如果我們從 7(第一個元素)開始進行螺旋排列,接下來我們將依次遍歷 8、9,然後是 6(第二行第三列)、3(第三行第三列)、2、1、4、5。
複雜度
函式的時間複雜度為 O(n^2),其中 n 為給定方陣一邊的長度。這是因為我們恰好遍歷了矩陣中的每個元素一次。程式碼使用的空間複雜度也是 O(n^2),因為它將結果儲存為一個新的螺旋順序元素陣列。
結論
因此,上述函式可用於以 O(n^2) 的時間複雜度對矩陣元素進行順時針螺旋排列。我們主要使用了四個變數來跟蹤矩陣元素,以便按順時針順序進行螺旋排列。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP