Vấn đề
Chúng tôi được yêu cầu viết một hàm JavaScript nhận một số n. Hàm của chúng ta sẽ tạo và trả về một mảng có thứ tự N * N (mảng 2-D), trong đó các số 1 có tất cả các vị trí xoắn ốc bắt đầu từ [0, 0] và tất cả các số 0 có các vị trí không xoắn ốc.
Do đó, với n =5, đầu ra sẽ có dạng -
[ [ 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1 ], [ 1, 1, 1, 0, 1 ], [ 1, 0, 0, 0, 1 ], [ 1, 1, 1, 1, 1 ] ]
Ví dụ
Sau đây là mã -
const num = 5; const spiralize = (num = 1) => { const arr = []; let x, y; for (x = 0; x < num; x++) { arr[x] = Array.from({ length: num, }).fill(0); } let left = 0; let right = num; let top = 0; let bottom = num; x = left; y = top; let h = Math.floor(num / 2); while (left < right && top < bottom) { while (y < right) { arr[x][y] = 1; y++; } y--; x++; top += 2; if (top >= bottom) break; while (x < bottom) { arr[x][y] = 1; x++; } x--; y--; right -= 2; if (left >= right) break; while (y >= left) { arr[x][y] = 1; y--; } y++; x--; bottom -= 2; if (top >= bottom) break; while (x >= top) { arr[x][y] = 1; x--; } x++; y++; left += 2; } if (num % 2 == 0) arr[h][h] = 1; return arr; }; console.log(spiralize(num));
Đầu ra
Sau đây là đầu ra của bảng điều khiển -
[ [ 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1 ], [ 1, 1, 1, 0, 1 ], [ 1, 0, 0, 0, 1 ], [ 1, 1, 1, 1, 1 ] ]