class Solution {
public int[][] generateMatrix(int n) {
int[][] a = new int[n][n];
int i = 0;
int j = 0;
int start = 0;
while (i < n && j < n) {
generate(i, j, a, n, start);
i++;
++j;
n--;
if (i < n && j < n)
start = a[i][j - 1];
}
return a;
}
public void generate(int row, int col, int[][] a, int n, int start) {
int i = row;
int j = col;
a[i][j] = start + 1;
for (j++; j < n; j++) a[i][j] = a[i][j - 1] + 1;
j--;
for (i++; i < n; i++) a[i][j] = a[i -1][j] + 1;
i--;
for (j--; j >= col && i != row; j--) a[i][j] = a[i][j + 1] + 1;
j++;
for (i--; i > row && j != n; i--) a[i][j] = a[i+1][j] + 1;
}
}