题目描述
给定一个正整数 $n$,生成一个包含 $1$ 到 $n^2$ 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
样例
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
算法分析
模拟
- 将所有位置初始化为无穷大,从
(0,0)
开始,进行一周期4
循环操作,分别是往右走,往下走,往左走,往上走,走到当前位置把对应的数字补上
时间复杂度 $O(n^2)$
Java 代码
class Solution {
static int INF = 0x3f3f3f3f;
public int[][] generateMatrix(int n) {
int[][] ans = new int[n][n];
for(int i = 0;i < n;i ++) Arrays.fill(ans[i],INF);
int k = 0;
int x = 0,y = -1;
while(k != n * n)
{
//向右走
while(y + 1 < n && ans[x][y + 1] == INF)
{
ans[x][y + 1] = ++ k;
y ++;
}
//向下走
while(x + 1 < n && ans[x + 1][y] == INF)
{
ans[x + 1][y] = ++ k;
x ++;
}
//向左走
while(y - 1 >= 0 && ans[x][y - 1] == INF)
{
ans[x][y - 1] = ++ k;
y --;
}
//向上走
while(x - 1 >= 0 && ans[x - 1][y] == INF)
{
ans[x - 1][y] = ++ k;
x --;
}
}
return ans;
}
}
这不用初始化为正无穷也行把