螺旋矩阵 II

83 阅读1分钟

螺旋矩阵 II

59 螺旋矩阵 II

class Solution {
    public int[][] generateMatrix(int n) {
        int [][] res = new int[n][n];
        //定义每次循环起始位置
        int startx = 0;
        int starty = 0;
        //定义循环次数
        int loop = n / 2;
        //定义填充数字
        int count = 1;
        //定义中间位置
        int mid = n / 2;
        //定义偏移量
        int offset = 1;
        int i;
        int j;
        while(loop > 0) {
            i = startx;
            j = starty;

            //模拟填充上行从左到右(左闭右开),i不变,j++,直至到该行末尾(不包含末尾)
            for (; j < starty + n - offset; j++) {
                res[i][j] = count++;
            }

            //模拟填充右列从上到下(左闭右开),j不变,i++,直至到该列末尾(不包含末尾)
            for (; i < startx + n - offset; i++) {
                res[i][j] = count++;
            }

            //模拟填充下行从右到左(左闭右开),i不变,j--,直至到该行开头(不包含开头)
            for (; j > starty; j--) {
                res[i][j] = count++;
            }

            //模拟填充左列从下到上(左闭右开),j不变,i--,直至到该列开头(不包含开头)
            for (; i > startx; i--) {
                res[i][j] = count++;
            }

            loop--;
            //开始下一圈,起始位置各自加1
            startx++;
            starty++;

            //控制每一条边的长度
            offset += 2;
        }

        //如果n为奇数,单独给矩阵中间的位置赋值
        if (n % 2 == 1) {
            res[mid][mid] = count;
        }
        return res;
    }
}