Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

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
]

  1. JavaScript DataView()

    JavaScript DataViewを使用すると、低レベルのインターフェイスを提供することにより、バイナリArrayBufferで複数の数値タイプの読み取りと書き込みを行うことができます。 DataView()を使用せずにArrayBufferを直接操作することはできません。 以下は、JavaScriptDataViewを実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta na

  2. JavaScript Let

    2015年に導入されたJavaScriptLetキーワードを使用すると、ブロックスコープの変数を定義できます。 以下は、JavaScriptでLetキーワードを使用して変数を宣言するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0&