Spiral Matrix II(旋转矩阵)

2014-11-24 01:42:34 · 作者: · 浏览: 0

题目原型:

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 ]
]
基本思路:

我们注意到,每次开始操作的位置是对角线的位置。在每次打印一圈时,先将列坐标累加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;
	}