题目描述
给你一个正整数
n
,生成一个包含1
到n2
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵matrix
。示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:
输入:n = 1 输出:[[1]]提示:
1 <= n <= 20
AC代码以及注释
class Solution {
public int[][] generateMatrix(int n) {
int[][] ret = new int[n][n];
int i = 0;
int j = 0;
int cur = 1;
int n2 = n * n;
int x = 1; // 横向移动方向,1代表向右,-1代表向左,0代表横向不移动
int y = 0; // 纵向移动方向,1代表向下,-1代表向上,0代表纵向不移动
int maxi = n - 1;
int mini = 0;
int maxj = n - 1;
int minj = 0;
while ((n % 2 == 0 && cur <= n2) || (n % 2 == 1 && cur < n2)) {
if (x == 1 && y == 0) {
if (j < maxj) {
ret[i][j++] = cur++;
continue;
} else {
maxj--;
x = 0;
y = 1;
}
}
if (x == 0 && y == 1) {
if (i < maxi) {
ret[i++][j] = cur++;
continue;
} else {
maxi--;
x = -1;
y = 0;
}
}
if (x == -1 && y == 0) {
if (j > minj) {
ret[i][j--] = cur++;
continue;
} else {
minj++;
x = 0;
y = -1;
}
}
if (x == 0 && y == -1) {
if (i > mini) {
ret[i--][j] = cur++;
continue;
} else {
mini++;
x = 1;
y = 0;
// 为进入下一轮作准备
i = mini;
j = minj;
}
}
}
if (n % 2 == 1) {
ret[(n - 1) / 2 ][(n - 1) / 2 ] = n * n;
}
return ret;
}
}
时间以及空间复杂度
-
时间复杂度:O(n²)。执行用时:0ms,击败 100%使用 Java 的用户
-
空间复杂度:O(1)。内存消耗:39.3 MB