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) 的時間複雜度對矩陣元素進行順時針螺旋排列。我們主要使用了四個變數來跟蹤矩陣元素,以便按順時針順序進行螺旋排列。

更新於: 2023年5月18日

瀏覽量 231

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告