目录
- 题目描述
- 示例 1:
- 代码实现
题目描述
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:

输入:n = 3
 输出:[[1,2,3],[8,9,4],[7,6,5]]
代码实现
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] ans = new int[n][n];// 定义二维螺旋数组
        // 循环一层的初始横坐标,初始纵坐标
        int startX = 0;
        int startY = 0;
        int offset = 1;// 边界偏移量,控制遍历顺序从外向内
        int cnt = 1;// 遍历当前位置的元素数值
        int i = 0, j = 0;// 遍历过程中的临时变量,i表示行,j表示列
        // 遍历矩阵的层数为矩阵长度的一半,分边长长度为奇偶两种情况
        for (int k = 0; k < n / 2; k++) {// 每一条边界遵循左闭右开的遍历顺序
            // 遍历上边界
            for (j = startX; j < n - offset; j++) {
                ans[startX][j] = cnt++;
            }
            // 遍历右边界
            for (i = startX; i < n - offset; i++) {
                ans[i][j] = cnt++;
            }
            // 遍历下边界
            for (; j > startY; j--) {
                ans[i][j] = cnt++;
            }
            // 遍历左边界
            for (; i > startX; i--) {
                ans[i][j] = cnt++;
            }
            // 边界向内缩小一周
            startX++;// 起始位置横坐标加一
            startY++;// 起始位置纵坐标加一
            offset++;// 边界偏移量加一
        }
        // 如果矩阵边长为奇数的情况,需要手动填充中心数
        if (n % 2 != 0) {
            ans[startX][startY] = cnt++;
        }
        return ans;
    }
}



















