模拟过程-螺旋矩阵2

模拟过程-螺旋矩阵2

螺旋矩阵2
模拟遍历过程, 要按照外圈到内圈进行循环, 考虑奇数偶数不同。

题解

public class Solution {
    public int[][] generateMatrix(int n) {
        // 定义循环的偏移起点,循环次数
        int startX = 0, startY = 0;
        int loop = n / 2;

        // 定义初始赋值
        int count = 1;

        // 初始化数组
        int[][] result = new int[n][n];

        // 偏移量,每个圈的宽度减2
        int offset = 0;

        while (loop > 0) {
            int size = n - offset;
            //模拟上侧从左到右:左闭右开
            for (int j = startY; j < startY + size - 1; j++) {
                result[startX][j] = count++;
            }
            //模拟右侧从上到下
            for (int i = startX; i < startX + size - 1; i++) {
                result[i][startY + (size - 1)] = count++;
            }
            //模拟下侧从右到左
            for (int j = startY + size - 1; j > startY; j--) {
                result[startX + (size - 1)][j] = count++;
            }
            //模拟左侧从下到上
            for (int i = startX + size - 1; i > startX; i--) {
                result[i][startY] = count++;
            }
            //更新参数
            loop--;
            startX += 1;
            startY += 1;
            offset += 2;
        }
        // 如果是奇数, 中间还有一个赋值
        if (n % 2 == 1) {
            result[n / 2][n / 2] = count;
        }
        return result;
    }
}
posted @ 2022-02-13 14:50  -Rocky-  阅读(27)  评论(0编辑  收藏  举报