给你一个数n生成一个包含1-n^2的螺旋形矩阵
样例
n = 3
矩阵为
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
简单的方法是按照矩阵的生成方法一个个往其中填数得到完整矩阵.
以n = 4为例
填充的规律是
最外圈
0 1 2 3
11 . . 4
10 . . 5
9 8 7 6
填充时存在边界left = 0,right = n - 1,top = 0,bottom = n - 1;
按照第一行,最后一列,最后一行,第一列的顺序填充
0->2,3->5,6->8,9->11
所以第一行填充0到right-1区域,其他部分类推
有了最外圈的规律之后,可以推知内圈也完全满足这样的填充方式
需要注意的是:n为偶数时,最内层刚好为一圈,n为奇数是,最内层为点,因此奇数需要将中间的点单独补上去
public class Solution {
/**
* @param n an integer
* @return a square matrix
*/
public int[][] generateMatrix(int n) {
// Write your code here
int [][]res = new int[n][n];
int left = 0;
int right = n - 1;
int top = 0;
int bottom = n - 1;
int num = 1;
while(left < right && top < bottom)
{
//第一行
for(int i = left; i < right; i++)
{
res[top][i] = num++;
}
//最后一列
for(int i = top; i < bottom; i++)
{
res[i][right] = num++;
}
//最后一行
for(int i = right; i > left; i--)
{
res[bottom][i] = num++;
}
//第一列
for(int i = bottom; i > top; i--)
{
res[i][left] = num++;
}
left ++;
top++;
right --;
bottom --;
}
// 如果是奇数,加上中间那个点
if(n % 2 == 1){
res[n / 2][n / 2] = num;
}
return res;
}
}