import java.util.Arrays; /** * Created by lvhao on 2017/7/6. * Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 54题螺旋取数的逆过程,生成螺旋数组,思路是一样的 */ public class Q59SpiralMatrix2 { public static void main(String[] args) { for (int[] num : generateMatrix(5)) System.out.println(Arrays.toString(num)); } public static int[][] generateMatrix(int n) { int[][] res = new int[n][n]; //特殊情况 if (n == 0) return res; int[] nums = new int[n*n]; //设置cur记录当前取到哪个数了 int cur = 0; //生成原始数据 for (int i = 1; i <= (n*n); i++) { nums[i-1] = i; } //外循环是层数 for (int i = 0; i < n / 2; i++) { //里边四个循环分别生成上右下左四边,记得每次取完数cur+1 //上边 for (int j = 0; j < n - (i * 2) - 1; j++) { res[i][i+j] = nums[cur]; cur++; } //右边 for (int j = 0; j < n - (i * 2) - 1; j++) { res[i+j][n-i-1] = nums[cur]; cur++; } //下边 for (int j = 0; j < n - (i * 2) - 1; j++) { res[n-1-i][n-1-i-j] = nums[cur]; cur++; } //左边 for (int j = 0; j < n - (i * 2) - 1; j++) { res[n-1-i-j][i] = nums[cur]; cur++; } } //n是奇数时最后一个数循环不到,单独考虑 if (n%2 != 0) { res[n/2][n/2] = nums[n*n-1]; } return res; } }