Bootstrap

LeetCode:59.螺旋矩阵II

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的,坚持每天打卡下,希望明年能跳个大厂!
代码随想录

LeetCode:59.螺旋矩阵II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
在这里插入图片描述
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]

四个顶点,四条边,每次处理一个顶点和一条边,然后每完成一圈都需要往里面一层移动,因为每一圈从行的角度来看都是减少两个单元格,所以会一直绕n / 2 圈,如果n是奇数还需要单独考虑最中间的点的值

	public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        int startX = 0, startY = 0;
        int i = 0, j = 0;
        int offset = 1;
        int count = 1;
        int loop = 1;
        while(loop <= n / 2){
            for(j = startY; j < n - offset; j++){
                nums[startX][j] = count++;
            }
            for(i = startX; i < n - offset; i++){
                nums[i][j] = count++;
            }
            // 通过上面的for循环 已经有 j = n - offset
            for(; j > startY; j--){
                nums[i][j] = count++;
            }
            // 通过上面的for循环,已经有 i = n - offset
            for(; i > startX; i--){
                nums[i][j] = count++;
            }
            startX++;
            startY++;
            offset++;
            loop++;
        }
        if(n % 2 == 1){
            nums[startX][startY] = count;
        } 
        return nums;
    }
;