题目
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 ]
]
分析
递归
但是不知道为什么大家都用循环
我一定是被递归套路了
class Solution {
public static int[][] generateMatrix(int n) {
int[][] ret = new int[n][n];
if(n == 0) {
return ret;
}
circle(ret, 1, 0);
return ret;
}
public static void circle(int[][] ret, int start, int index) {
//数目为n-2*index -1
int rowNum = ret.length - 2*index - 1;
if (rowNum == 0) {
ret[index][index] = start;
return;
} else if (rowNum<0) {
return;
}
for (int i = index, j = index; j<rowNum + index; j++) {
ret[i][j] = start++;
}
for (int i = index, j =rowNum + index; i<rowNum + index;i++) {
ret[i][j] = start++;
}
for (int i = rowNum + index, j =rowNum + index; j>index;j--) {
ret[i][j] = start++;
}
for (int i = rowNum + index, j =index; i>index;i--) {
ret[i][j] = start++;
}
circle(ret, start, index+1);
}
}