题目原型:
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<n-layer)
{
num[row][column]=i;
i++;
column++;
}
column--;//退回来
row++;//开始
while(row<n-layer)
{
num[row][column]=i;
i++;
row++;
}
row--;
column--;
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;
}
Spiral Matrix II(旋转矩阵),布布扣,bubuko.com
原文:http://blog.csdn.net/cow__sky/article/details/20735439