使用 JavaScript 對矩陣進行對角遍歷


問題

我們需要編寫一個 JavaScript 函式,該函式接收一個方陣(一個包含相同行和列數的陣列陣列)。該函式應斜向遍歷該陣列陣列,並準備一個新陣列,其中包含以遍歷時遇到的順序放置的元素。

例如,如果輸入函式的是 -

const arr = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];

那麼輸出應該是 -

const output = [1, 2, 4, 7, 5, 3, 6, 8, 9];

示例

 動態演示

程式碼如下 -

const arr = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];
const findDiagonalOrder = (arr = []) => {
   if(!arr.length){
      return [];
   };
   let ind = 0;
   let colBegin = 0, rowBegin = 0;
   let rowMax = arr.length, colMax = arr[0].length;
   const res = [], stack = [];
   while(rowBegin< rowMax || colBegin<colMax) {
      for(let row = rowBegin, col = colBegin; row < rowMax && col >=0 ;
      row++,col--){
         if(ind%2 === 0){
            stack.push((arr[row][col]));
         }else{
            res.push(arr[row][col]);
         };
      };
      ind++;
      while(stack.length){
         res.push(stack.pop());
      };
      colBegin++
      if(colBegin> colMax-1 && rowBegin < rowMax){
         colBegin = colMax-1
         rowBegin++
      }
   };
   return res
};
console.log(findDiagonalOrder(arr));

程式碼說明

我們採取的步驟如下 -

  • 按一個方向遍歷,同時跟蹤起點。

  • 如果索引為偶數,我們將推入堆疊,並在到達對角線末端時彈出,將彈出的內容新增到我們的輸出陣列。

  • 我們隨著移動到下一個對角線而不斷增加索引。

  • 我們不斷增加列開始索引,直到它到達末端,因為在接下來的迭代中它將停止在最後一個索引,而我們將從該點開始增加行開始索引。

輸出

控制檯中的輸出如下 -

[
   1, 2, 4, 7, 5,
   3, 6, 8, 9
]

更新時間: 04-Mar-2021

723 次瀏覽

開啟你的 職業生涯

透過完成本課程頒發證書

開始
廣告