Medium
Given a positive integer n, generate an n x n matrix filled with elements from 1 to n2 in spiral order.
Example 1:

Input: n = 3
Output: [[1,2,3],[8,9,4],[7,6,5]]
Example 2:
Input: n = 1
Output: [[1]]
Constraints:
1 <= n <= 20class Solution {
fun generateMatrix(n: Int): Array<IntArray> {
var num = 1
var rStart = 0
var rEnd = n - 1
var cStart = 0
var cEnd = n - 1
val spiral = Array(n) { IntArray(n) }
while (rStart <= rEnd && cStart <= cEnd) {
for (k in cStart..cEnd) {
spiral[rStart][k] = num++
}
rStart++
for (k in rStart..rEnd) {
spiral[k][cEnd] = num++
}
cEnd--
if (rStart <= rEnd) {
for (k in cEnd downTo cStart) {
spiral[rEnd][k] = num++
}
}
rEnd--
if (cStart <= cEnd) {
for (k in rEnd downTo rStart) {
spiral[k][cStart] = num++
}
}
cStart++
}
return spiral
}
}