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

Bài toán Snail Trail (xoáy ốc) ma trận vuông trong JavaScript

Mô tả bài toán

Cho ma trận vuông NxN, trả về mảng 1 chiều theo thứ tự xoáy ốc từ ngoài vào trung tâm (theo chiều kim đồng hồ).

Ví dụ minh họa

const arr = [
  [1, 2, 3, 4],
  [12, 13, 14, 5],
  [11, 16, 15, 6],
  [10, 9, 8, 7]
];

const spiralForm = arr => {
  return arr.length > 1 ?
    arr.splice(0, 1)[0]
    .concat(spiralForm(
      arr[0].map((c, i) => arr.map(r => r[i]))
      .reverse()
    )) :
    arr[0];
};

console.log(spiralForm(arr));

Kết quả

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]

Giải thích thuật toán

  1. Lấy hàng đầu tiên (top row)
  2. Xoay ma trận còn lại 90° ngược chiều kim đồng hồ (transpose + reverse)
  3. Đệ quy cho đến khi ma trận còn 1 hàng

Lưu ý

Phương pháp này thay đổi mảng gốc (splice). Nên copy mảng nếu cần giữ nguyên.