http://blog.csdn.net/shiquxinkong
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 ]
]
我们按着要求去走一圈,就像剥橘子一样,我们把上下左右的皮都剥掉了,那么这圈就可以了,只不过这里拨了一层还的拨。好了,看图:

其中颜色一样的表示在同一层,红色表示每层的起始点,这个实例共有三层,按着前面说的,在拨的时候就按上右下左的顺序去拨,上有老下有小左右兄弟右有姐妹。
那么我需要拨几层呢?上面的三层是我们用眼睛盯出来了,对,应该是 (n + 1)/ 2.< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Ly9DT0RFPC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">class Solution { public: vector
> generateMatrix(int n) { vector
> vivec(n,vector
(n, 0)); if(n <= 0) return vivec; int start_num = 1; //up,right,down and left construct a circle. int layer = 0; while(layer < (1+n)/2) { //up for(int i = layer; i < n - layer; ++i) { vivec[layer][i] = start_num++; } //right for(int i = layer + 1; i < n - layer; ++i) { vivec[i][n - layer - 1] = start_num++; } //down for(int i = n - layer - 2; i >= layer; --i) { vivec[n - layer - 1][i] = start_num++; } //left for(int i = n - layer - 2; i >= layer + 1; --i) { vivec[i][layer] = start_num++; } layer++; } return vivec; } };注意控制每一层的起始边界。