### 解题思路
此处撰写解题思路
设置填数字的方向dir,0123代表 right down left up
沿着当前dir填数字直到下个数字已被填写或已到数组边界,然后dir改变
对于数组边界可以加判断或者在原数组上设置一圈-1的边界
### 代码
class Solution {
public int[][] generateMatrix(int a) {
int[][] m = new int[a + 2][a + 2];
for (int i = 0; i <= a + 1; i++) {
m[0][i] = -1;
m[i][0] = -1;
m[a + 1][i] = -1;
m[i][a + 1] = -1;
}
int n = 0;
int dir = 0;//0 1 2 3 right down left up
int h = 1, l = 1;
while (n < a * a) {
n = n + 1;
if (dir == 0 && (l + 1) <= a + 1)
if (m[h][l] == 0) {
m[h][l] = n;
if (m[h][l + 1] != 0) {
dir = 1;
h = h + 1;
continue;
} else
l = l + 1;
}
if (dir == 1 && (h + 1) <= a + 1) {
if (m[h][l] == 0) {
m[h][l] = n;
if (m[h + 1][l] != 0) {
dir = 2;
l = l - 1;
continue;
} else
h = h + 1;
}
}
if (dir == 2 && (l - 1) >= 0) {
if (m[h][l] == 0) {
m[h][l] = n;
if (m[h][l - 1] != 0) {
dir = 3;
h = h - 1;
continue;
} else
l = l - 1;
}
}
if (dir == 3 && (h - 1) >= 0) {
if (m[h][l] == 0) {
m[h][l] = n;
if (m[h - 1][l] != 0) {
dir = 0;
l = l + 1;
continue;
} else
h = h - 1;
}
}
}
int[][] ans = new int[a][a];
for (int i = 0; i < a ; i++){
for (int j = 0; j < a ; j++){
ans[i][j]=m[i+1][j+1];
}
}
return ans;
}
}