class Solution {
public int[][] generateMatrix(int n) {
int[][] M = new int[n][n];
return generate(M, n);
}
private int[][] generate(int[][] M, int k) {
int loop = k / 2;
int start_x = 0;
int start_y = 0;
int val = 1;
int length = k;
while (loop >= 0) {
// top row from left to right
for (int j = 0; j < length - 1; j++) {
M[start_x][start_y + j] = val;
val++;
}
// right column from top to down
for (int i = 0; i < length - 1; i++) {
M[start_x + i][start_y + length - 1] = val;
val++;
}
// bottom row from right to left
for (int j = 0; j < length - 1; j++) {
M[start_x + length - 1][start_y + length - 1 - j] = val;
val++;
}
// left column from bottom to top
for (int i = 0; i < length - 1; i++) {
M[start_x + length - 1 - i][start_y] = val;
val++;
}
// move on the next inner circle
start_x++;
start_y++;
length -= 2;
loop--;
}
// fill in the center position if needed
if (k % 2 == 1) {
M[k/2][k/2] = k * k;
}
return M;
}
}
04-04
1470
10-12
598
10-12
277