← 返回首页
螺旋矩阵打印问题(Java实现)
发表时间:2023-11-14 15:21:04
螺旋矩阵打印问题(Java实现)

螺旋矩阵打印问题(Java实现)

题目要求:

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 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]