0059. Spiral Matrix Ii

0059. Spiral Matrix II #

题目 #

给定正整数n,生成一个包含1n^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;
    }
}