0059. Spiral Matrix II #
题目 #
给定正整数n
,生成一个包含1
到n^2
所有元素,且元素按顺时针顺序螺旋排列的nxn
正方形矩阵matrix
。
思路 #
对于n
阶方阵,共有n/2
个完整螺旋。
若n
为奇数,则matrix[n/2][n/2]
处存在独立元素n^2
,不构成螺旋,应单独考虑。
对于第offset
个螺旋,考虑四角元素的坐标,由左上顺时针分别为:
(offset, offset)
、(offset, n-offset-1)
、(n-offset-1, n-offset-1)
、(n-offset-1, offset)
分别添加螺旋[上]、螺旋[右]、螺旋[下]、螺旋[左]四条边的元素,添加过程中保持区间左闭右开的一致性。
代码 #
class Solution {
public int[][] generateMatrix(int n) {
int[][] matrix = new int [n][n];
int val = 1;
for (int offset=0; offset<n/2; offset++) {
for (int j=offset; j<n-offset-1; j++) matrix[offset][j] = val++;
for (int i=offset; i<n-offset-1; i++) matrix[i][n-offset-1] = val++;
for (int j=n-offset-1; j>offset; j--) matrix[n-offset-1][j] = val++;
for (int i=n-offset-1; i>offset; i--) matrix[i][offset] = val++;
}
if (n % 2 == 1) matrix[n/2][n/2] = n*n;
return matrix;
}
}