fun generateSpiralMatrix(n: Int): Array<IntArray> {
val matrix = Array(n) { IntArray(n) }
var top = 0
var bottom = n - 1
var left = 0
var right = n - 1
var num = 1
while (top <= bottom && left <= right) {
// Fill top row
for (i in left..right) {
matrix[top][i] = num++
}
top++
// Fill right column
for (i in top..bottom) {
matrix[i][right] = num++
}
right--
// Fill bottom row
if (top <= bottom) {
for (i in right downTo left) {
matrix[bottom][i] = num++
}
bottom--
}
// Fill left column
if (left <= right) {
for (i in bottom downTo top) {
matrix[i][left] = num++
}
left++
}
}
return matrix
}
fun main() {
val n = 3
val spiralMatrix = generateSpiralMatrix(n)
for (row in spiralMatrix) {
println(row.joinToString("\t"))
}
}
/*
run:
1 2 3
8 9 4
7 6 5
*/