目录
- 题目描述
- 示例 1:
- 代码实现
题目描述
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
代码实现
class Solution {
public int[][] generateMatrix(int n) {
int[][] ans = new int[n][n];// 定义二维螺旋数组
// 循环一层的初始横坐标,初始纵坐标
int startX = 0;
int startY = 0;
int offset = 1;// 边界偏移量,控制遍历顺序从外向内
int cnt = 1;// 遍历当前位置的元素数值
int i = 0, j = 0;// 遍历过程中的临时变量,i表示行,j表示列
// 遍历矩阵的层数为矩阵长度的一半,分边长长度为奇偶两种情况
for (int k = 0; k < n / 2; k++) {// 每一条边界遵循左闭右开的遍历顺序
// 遍历上边界
for (j = startX; j < n - offset; j++) {
ans[startX][j] = cnt++;
}
// 遍历右边界
for (i = startX; i < n - offset; i++) {
ans[i][j] = cnt++;
}
// 遍历下边界
for (; j > startY; j--) {
ans[i][j] = cnt++;
}
// 遍历左边界
for (; i > startX; i--) {
ans[i][j] = cnt++;
}
// 边界向内缩小一周
startX++;// 起始位置横坐标加一
startY++;// 起始位置纵坐标加一
offset++;// 边界偏移量加一
}
// 如果矩阵边长为奇数的情况,需要手动填充中心数
if (n % 2 != 0) {
ans[startX][startY] = cnt++;
}
return ans;
}
}