给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
题解:
T,B,L,R分别表示未扫描矩阵的边界。
初始时,T=0,B=n-1,L=0,R=n-1; 直到整个矩阵扫完完毕结束。
先从左到右行扫描,第T行的第L列到第R列,即nums[T][L]~nums[T][R];扫描完一行,相应T增1.
从上到下列扫描,第R列的第T行到第B行,即nums[T][R]~nums[B][R];扫描完一列,相应R减1.
从右到左行扫描,第B行的第R列到第L列,即nums[B][R]~nums[B][L];扫描完一行,相应B减1.
从下到上列扫描,第L列的第B行到第T行,即nums[B][L]~nums[T][L];扫描完一列,相应L增1.
JAVA代码:
class Solution {
public int[][] generateMatrix(int n) {
/*
从左到右一行
从上到下一列
从右到左一行
从下到上一列
*/
int[][] res = new int[n][n];
int num = 1;
int l = 0;
int r= n-1;
int t = 0;
int b = n-1;
int i=0;
while(num<=n*n){
//从左到右
for (i=l; i<=r; i++) res[t][i] = num++;
t++;
//从上到下
for (i=t; i<=b; i++) res[i][r] = num++;
r--;
//从右到左
for (i=r; i>=l; i--) res[b][i] = num++;
b--;
//从下到上
for (i=b; i>=t; i--) res[i][l] = num++;
l++;
}
return res;
}
}