function generateSpiralMatrix(n: number): number[][] {
const matrix: number[][] = Array.from({ length: n }, () => Array(n).fill(0));
let top: number = 0, bottom: number = n - 1;
let left: number = 0, right: number = n - 1;
let num: number = 1;
while (top <= bottom && left <= right) {
// Fill top row
for (let i: number = left; i <= right; i++) {
matrix[top][i] = num++;
}
top++;
// Fill right column
for (let i: number = top; i <= bottom; i++) {
matrix[i][right] = num++;
}
right--;
// Fill bottom row
if (top <= bottom) {
for (let i: number = right; i >= left; i--) {
matrix[bottom][i] = num++;
}
bottom--;
}
// Fill left column
if (left <= right) {
for (let i: number = bottom; i >= top; i--) {
matrix[i][left] = num++;
}
left++;
}
}
return matrix;
}
const n: number = 3;
const spiralMatrix: number[][] = generateSpiralMatrix(n);
// Print the matrix
spiralMatrix.forEach(row => {
console.log(row.join(" "));
});
/*
run:
"1 2 3"
"8 9 4"
"7 6 5"
*/