模拟过程-螺旋矩阵2
模拟过程-螺旋矩阵2
螺旋矩阵2
模拟遍历过程, 要按照外圈到内圈进行循环, 考虑奇数偶数不同。
题解
public class Solution {
public int[][] generateMatrix(int n) {
// 定义循环的偏移起点,循环次数
int startX = 0, startY = 0;
int loop = n / 2;
// 定义初始赋值
int count = 1;
// 初始化数组
int[][] result = new int[n][n];
// 偏移量,每个圈的宽度减2
int offset = 0;
while (loop > 0) {
int size = n - offset;
//模拟上侧从左到右:左闭右开
for (int j = startY; j < startY + size - 1; j++) {
result[startX][j] = count++;
}
//模拟右侧从上到下
for (int i = startX; i < startX + size - 1; i++) {
result[i][startY + (size - 1)] = count++;
}
//模拟下侧从右到左
for (int j = startY + size - 1; j > startY; j--) {
result[startX + (size - 1)][j] = count++;
}
//模拟左侧从下到上
for (int i = startX + size - 1; i > startX; i--) {
result[i][startY] = count++;
}
//更新参数
loop--;
startX += 1;
startY += 1;
offset += 2;
}
// 如果是奇数, 中间还有一个赋值
if (n % 2 == 1) {
result[n / 2][n / 2] = count;
}
return result;
}
}