题目原型:
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]基本思路:
我们注意到,每次开始操作的位置是对角线的位置。在每次打印一圈时,先将列坐标累加1,然后行坐标累加1,进而列坐标类减1,最后行坐标累减一;重复以上操作直到结束。
public int[][] generateMatrix(int n)
{
int[][] num = new int[n][n];
int layer = 0;//围成的层数
int i = 1;//计数
int row = 0;
int column = 0;
while(true)
{
while(column
=layer)
{
num[row][column]=i;
i++;
column--;
}
column++;
row--;
layer++;//将圈数加一
while(row>=layer)
{
num[row][column]=i;
i++;
row--;
}
if(layer>((n+1)/2))
break;
//重新分配起点
row = layer;
column = layer;
}
return num;
}