Given an integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order.
Example
Given n = 3
,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
public class Solution {
/**
* @param n an integer
* @return a square matrix
*/
public int[][] generateMatrix(int n) {
if(n == 0) return new int[0][0];
int[][] res = new int[n][n];
if(n == 1) {
res[0][0] = 1;
return res;
}
int layer = 1, count = 1;
while(true) {
for(int i = layer; i <= n - layer; i++) {
res[layer - 1][i - 1] = count++;
}
for(int i = layer; i <= n - layer; i++) {
res[i - 1][n - layer] = count++;
}
for(int i = n - layer; i >= layer; i--) {
res[n - layer][i] = count++;
}
for(int i = n - layer; i >= layer; i--) {
res[i][layer - 1] = count++;
}
if(n % 2 == 0 && layer * 2 == n) return res;
layer ++;
if(n % 2 == 1 && layer * 2 > n) {
res[layer - 1][layer - 1] = count;
return res;
}
}
}
}