一、问题描述
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
二、问题分析
利用分治算法,参见博文生成数字旋转方阵,这里只是生成区域的顺序发生变化。
三、算法代码
public class Solution {
public int[][] generateMatrix(int n) {
int [][] result = new int[n][n];
generateRotate(result, 1, 0, n);
return result;
}
//生成旋转矩阵
public void generateRotate(int [][] result, int number, int begin, int size){
if(size == 1){
result[begin][begin] = number;
return;
}
if(size == 0){
return;
}
//生成区域A
int i = begin;
int j = begin;
for(int k = 0; k < size - 1; k++){
result[i][j] = number;
number++;
j++;
}
//生成区域B
for(int k = 0; k < size - 1; k++){
result[i][j] = number;
number++;
i++;
}
//生成区域C
for(int k = 0; k < size - 1; k++){
result[i][j] = number;
number++;
j--;
}
//生成区域D
for(int k = 0; k < size - 1; k++){
result[i][j] = number;
number++;
i--;
}
//递归调用
generateRotate(result, number, begin + 1, size - 2);
}
}