从右上角开始:
初始状态下,右上角(matrix[0][n-1])开始填充数字 1。
往上到下填充至最右列。
从上到下(最右列):
填充完成后,最右列减少,切换到最底行,开始从右到左。
从右到左(最底行):
到达底行后,从最右到最左填充。 填充完成后,底行减少。
从下到上(最左列):
最左列开始,从底向上填充,直到顶部。 填充完成后,最左列减少。
从左到右(顶行):
顶部继续由左到右填充。 填充完,顶行更新到下一行。然后重复上述操作,直到填满。
工作原理:
代码循环依次按照四种方向(上到下、右到左、下到上、左到右)填充值,形成螺旋序列,控制边界的 top、bottom、left、right 确保每个方向填充后,范围逐渐缩小。
关键逻辑:
动态调整边界:
每次填充完一列或一行后,相应地调整边界变量(top, bottom, left, right)。
确保矩阵中的数字螺旋递增填充,最终数值遍布所有位置。
填充结束条件:
当 num 超过 maxNum(n * n),意味着所有元素都已填充。
`int[][] matrix = new int[n][n];
int top = 0, bottom = n - 1, left = 0, right = n - 1;
int num = 1, maxNum = n * n;
while (num <= maxNum) {
// 从上到下
for (int i = top; i <= bottom; i++) {
matrix[i][right] = num++;
}
right--;
// 从右到左
for (int i = right; i >= left; i--) {
matrix[bottom][i] = num++;
}
bottom--;
// 从下到上
for (int i = bottom; i >= top; i--) {
matrix[i][left] = num++;
}
left++;
// 从左到右
for (int i = left; i <= right; i++) {
matrix[top][i] = num++;
}
top++;
}
return matrix;`