用java实现螺旋数组

来源:互联网 发布:python 新浪股票数据 编辑:程序博客网 时间:2024/06/04 20:28

接收数组的行数和列数,返回正序和倒序的螺旋数组

package cn.baokx;public class Test {public static void main(String[] args) {printArray(getSpiralArray(5,5,false));System.out.println("**************");printArray(getSpiralArray(5,5,true));}//返回螺旋数组public static int [][] getSpiralArray(int m,int n,boolean reverse){//定义一个长度为m*n的数组,并按顺序初始化int [] numArray = new int[m*n];for(int i = 0 ; i < numArray.length ; i++){if(!reverse){numArray[i] = (i+1);}else{numArray[i] = (numArray.length-i);}}//初始化数组下标int foot = 0;//声明螺旋数组int[][] array = new int[m][n];//计算"层数",以m和n中较小的数为准int layer = m<n?m:n;layer = (layer%2==1)?(layer / 2 + 1):(layer / 2);// 从外层到里层循环for (int i = 0; i < layer; i++) { //从左到右for (int j = i; j < n - i; j++) {array[i][j] = numArray[foot++];if(foot>=m*n){return array;}}// 从上到下for (int j = i + 1;  j < m - i; j++) {array[j][n - i - 1] = numArray[foot++];if(foot>=m*n){return array;}}// 从右到左for (int j = n - i - 2; j >= i; j--) {array[m - i - 1][j] = numArray[foot++];if(foot>=m*n){return array;}}// 从下到上for (int j = m - i - 2; j > i; j--) {array[j][i] = numArray[foot++];if(foot>=m*n){return array;}}}return array;}//打印二维数组public static void printArray(int [][] array){for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[0].length; j++) {  if(array[i][j]<10){  System.out.print("0");  }  System.out.print(array[i][j] + " ");}System.out.println();} }}



4 0