59. Spiral Matrix II 「螺旋矩阵 II」

给定一个正整数 n,生成一个方形矩阵,并使用 1 到 n2 以螺旋顺序填充。

举例:
输入: 3
输出: [[1, 2, 3], [8, 9, 4], [7, 6, 5]]

在做完了上一个螺旋矩阵的题后,做这个题就很简单了,因为上一题用到的思路这个题同样适用,只是把读取值换为了写入,毫无难度?,甚至在代码上可以比上一个题更简单些,因为是方形矩阵,就不需要 length 了。

/*
 * 59. Spiral Matrix II
 * https://leetcode.com/problems/spiral-matrix-ii/
 * https://www.whosneo.com/59-spiral-matrix-ii/
 */

public class GenerateMatrix {
    public static void main(String[] args) {
        GenerateMatrix solution = new GenerateMatrix();

        int[][] result = solution.generateMatrix(3);
        solution.print(result);
        result = solution.generateMatrix(6);
        solution.print(result);
    }

    private int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];

        int i = 0, j = -1;
        int target = n * n;

        for (int x = 1, value = 1, direction = 0; value <= target; x++, direction++) {
            for (int step = 0; step < n - x / 2; step++, value++) {
                switch (direction % 4) {
                    case 0: j++; break;
                    case 1: i++; break;
                    case 2: j--; break;
                    case 3: i--; break;
                }
                matrix[i][j] = value;
            }
        }

        return matrix;
    }

    private void print(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        System.out.println("[");
        for (int i = 0; i < m; i++) {
            System.out.print(" [");
            for (int j = 0; j < n; j++) {
                System.out.print(matrix[i][j]);
                if (j < n - 1)
                    System.out.print(", ");
            }
            System.out.print("]");
            if (i < m - 1)
                System.out.print(",");
            System.out.println();
        }
        System.out.println("]");
    }
}