package com.classmassage.cn.util;public class Lxjz {/*** question: 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且* 元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。*/public static void main(String[] args) {printMatrix(generateMatrix(5));printMatrix(generateMatrixn(5));}//正螺旋矩阵public static int[][] generateMatrix(int n) {//当前位置int i = 0, j = 0;//循环次数int loop = n == 1 ? 1 : n - 1;//当前填充的数据int count = 1;//标识方向int direction = 1;//存放结果int[][] result = new int[n][n];while (count <= n * n) {//从上往下if (direction == 1) {for (int k = 0; k < loop; ++k) {result[i][j++] = count++;}direction = 2;continue;}//从左往右if (direction == 2) {for (int k = 0; k < loop; k++) {result[i++][j] = count++;}direction = 3;continue;}//从右往左if (direction == 3) {for (int k = 0; k < loop; k++) {result[i][j--] = count++;}direction = 4;continue;}//从下往上if (direction == 4) {for (int k = 0; k < loop; k++) {result[i--][j] = count++;}direction = 1;loop = loop == 3 || loop == 2 ? loop / 2 : loop - 2;i++;j++;continue;}}return result;}//逆螺旋矩阵public static int[][] generateMatrixn(int n) {//当前位置int i = 0, j = 0;//循环次数int loop = n == 1 ? 1 : n - 1;//当前填充的数据int count = 1;//标识方向int direction = 1;//存放结果int[][] result = new int[n][n];while (count <= n * n) {//从上往下if (direction == 1) {for (int k = 0; k < loop; k++) {result[i++][j] = count++;}direction = 2;continue;}//从左往右if (direction == 2) {for (int k = 0; k < loop; ++k) {result[i][j++] = count++;}direction = 3;continue;}//从右往左if (direction == 3) {for (int k = 0; k < loop; k++) {result[i--][j] = count++;}direction = 4;continue;}//从下往上if (direction == 4) {for (int k = 0; k < loop; k++) {result[i][j--] = count++;}direction = 1;loop = loop == 3 || loop == 2 ? loop / 2 : loop - 2;i++;j++;continue;}}return result;}/*** 打印矩阵** @param matrix*/public static void printMatrix(int[][] matrix) {for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {System.out.print(matrix[i][j] + "\t");}System.out.println();}}}