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 ]
]
tag: 坐标变换。 递归。 矩阵
public class Solution {
public int[][] generateMatrix(int n) {
if(n <= 0) {
return new int[0][0];
}
if(n == 1) {
int[][] matrix = new int[1][1];
matrix[0][0] = 1;
return matrix;
}
int x = 0;
int y = 0;
int rows = n;
int cols = n;
int[][] matrix = new int[n][n];
int count = 1;
helper(matrix, x, y, rows, cols, count);
return matrix;
}
public void helper(int[][] matrix, int x, int y, int rows, int cols, int count) {
if(rows <= 0 || cols <= 0) {
return;
}
// first line
for(int i = 0; i < cols; i++) {
matrix[x][y + i] = count++;
}
// right line
for(int i = 1; i < rows - 1; i++) {
matrix[x + i][y + cols - 1] = count++;
}
// last line
if(rows > 1) {
for(int i = cols - 1; i >= 0; i-- ) {
matrix[x + rows - 1 ][y + i] = count++;
}
}
if(cols > 1) {
for(int i = cols - 2; i > 0; i--) {
matrix[x + i][y] = count++;
}
}
helper(matrix, x + 1, y + 1, rows - 2, cols - 2,count);
}
}