一. 问题描述
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
二. 解题思路
按照模拟往矩阵内填数依次填写
* 步骤一:将数组依次填入到rf行中lf~ll列中,rf=rf+1,判断数组填完;
* 步骤二:将数组依次填入到ll列的rf~rl行中,ll=ll-1,判断数组填完;
* 步骤三:将数组依次填入到rl行中ll~lf列中,rl=rl-1,判断数组填完;
* 步骤四:将数组依次填入到lf列的rl~rf行中,lf=lf+1,判断数组填完;
* 第五步:重复步骤一
三. Java代码
class Solution { public int[][] generateMatrix(int n) { int rf=0,rl=n-1; //表示行的标记 int lf=0,ll=n-1; //表示列的标记 int number=1; int[][] arr=new int[n][n]; while(true) { for(int i=lf;i<=ll&&number<=(n*n);i++) { arr[rf][i]=number; number++; } rf=rf+1; for(int i=rf;i<=rl&&number<=(n*n);i++) { arr[i][ll]=number; number++; } ll=ll-1; for(int i=ll;i>=lf&&number<=(n*n);i--) { arr[rl][i]=number; number++; } rl=rl-1; for(int i=rl;i>=rf&&number<=(n*n);i--) { arr[i][lf]=number; number++; } lf=lf+1; if(number>(n*n)) { break; } } return arr; } }