题目原型:
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