Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
public class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
if(n == 0)
return res;
boolean[][] mask = new boolean[n][n];
int i = 0, j = 0, k = 1;
res[0][0] = 1;
mask[0][0] = true;
while(k < n * n){
//go to the right
while((j + 1 < n) && mask[i][j + 1] == false){
k++;
j++;
res[i][j] = k;
mask[i][j] = true;
}
//go down
while((i + 1 < n) && mask[i + 1][j] == false){
k++;
i++;
res[i][j] = k;
mask[i][j] = true;
}
//go to the left
while((j > 0) && mask[i][j - 1] == false){
k++;
j--;
res[i][j] = k;
mask[i][j] = true;
}
//go up
while((i > 0) && mask[i - 1][j] == false){
k++;
i--;
res[i][j] = k;
mask[i][j] = true;
}
}
return res;
}
}