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();
}
}
}
螺旋矩阵(正螺旋和逆螺旋)
最新推荐文章于 2022-11-12 17:12:33 发布