Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example, Given n = 3,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
Solution
public class Solution {
public int[][] generateMatrix(int n) {
int[][] result = new int[n][n];
if (n == 1) {
result[0][0] = 1;
return result;
}
generate(0, n, 1, result);
return result;
}
public void generate(int level, int n, int start, int[][] result) {
for (int i = level; i < n - level - 1; i++) {
result[level][i] = start;
start++;
}
for (int i = level; i < n - level - 1; i++) {
result[i][n - level - 1] = start;
start++;
}
for (int i = n - level - 1; i > level; i--) {
result[n - level - 1][i] = start;
start++;
}
for (int i = n - level - 1; i > level; i--) {
result[i][level] = start;
start++;
}
if (start == n * n) {
result[level+1][level+1] = start;
return;
} else if (start < n * n){
generate(level + 1, n, start, result);
}
}
}