螺旋矩阵打印问题(Java实现)
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。如下图所示:

解题思路:
依旧是设置上下左右边界,定义一个n*n的二维数组,顺时针向二维数组中插入数据,直到插入的数据大于n^2,每一次for循环都要更新边界。
实现代码:
import java.util.Arrays;
public class PrintMatrixDemo {
public static int[][] generateMatrix(int rows) {
int[][] matrix = new int[rows][rows];
int up = 0;//上边界
int down = rows - 1;//下边界
int left = 0;//左边界
int right = rows - 1;//右边界
int k = 1;//从元素1开始插入到二维数组中
int num = rows * rows;//总共不超过n的平方
//循环结束条件为插入的元素值超过n的平方
while(k<=num)
{
for(int i=left;i<=right;i++)//上边界
{
matrix[up][i]=k++;
}
up++;//将上边界插入了过后记得要更新上边界的值
for(int i=up;i<=down;i++)//右边界
{
matrix[i][right]=k++;
}
right--;
for(int i=right;i>=left;i--)//下边界
{
matrix[down][i]=k++;
}
down--;
for(int i=down;i>=up;i--)//左边界
{
matrix[i][left]=k++;
}
left++;
}
//返回二维数组
return matrix;
}
public static void main(String[] args) {
int [][] result = generateMatrix(10);
//System.out.println(Arrays.toString(result));
for(int[] arr : result){
System.out.println(Arrays.toString(arr));
}
}
}
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[36, 37, 38, 39, 40, 41, 42, 43, 44, 11]
[35, 64, 65, 66, 67, 68, 69, 70, 45, 12]
[34, 63, 84, 85, 86, 87, 88, 71, 46, 13]
[33, 62, 83, 96, 97, 98, 89, 72, 47, 14]
[32, 61, 82, 95, 100, 99, 90, 73, 48, 15]
[31, 60, 81, 94, 93, 92, 91, 74, 49, 16]
[30, 59, 80, 79, 78, 77, 76, 75, 50, 17]
[29, 58, 57, 56, 55, 54, 53, 52, 51, 18]
[28, 27, 26, 25, 24, 23, 22, 21, 20, 19]