Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Duyệt chéo ma trận trong JavaScript


Vấn đề:

Cần viết hàm JS nhận ma trận vuông (số hàng = số cột). Duyệt theo đường chéo và tạo mảng mới theo thứ tự duyệt.

Ví dụ:

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

Kết quả:

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

Ví dụ

Mã thực hiện:

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));

Giải thích code:

Các bước:

  • Duyệt theo một hướng, theo dõi điểm bắt đầu.

  • Nếu chỉ số chẵn, đẩy vào stack và pop khi hết đường chéo, thêm vào mảng kết quả.

  • Tăng chỉ số khi chuyển đường chéo tiếp theo.

  • Tăng chỉ số cột bắt đầu đến cuối, sau đó tăng chỉ số hàng bắt đầu.

Kết quả

Kết quả in ra console:

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