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); } }