leetcode:59. 螺旋矩阵 II

题目

给你一个正整数 n ,生成一个包含 1[中等] 59. 螺旋矩阵 II - 图1 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

示例 1:
[中等] 59. 螺旋矩阵 II - 图2

  1. 输入:n = 3
  2. 输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

解答 & 代码

思路同:
[中等] 54. 螺旋矩阵

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> matrix(n, vector<int>(n));
        int up = 0;                // 上边界
        int down = n - 1;        // 下边界
        int left = 0;            // 左边界
        int right = n - 1;        // 右边界
        int cnt = 1;            // 当前的数值
        // 螺旋遍历矩阵的每个位置
        while(cnt <= n * n)
        {
            if(up <= down)
            {
                for(int j = left; j <= right; ++j)    // 从左往右遍历上边界
                {
                    matrix[up][j] = cnt;
                    ++cnt;
                }
                ++up;                                // 上边界收缩(下移)
            }

            if(right >= left)    
            {
                for(int i = up; i <= down; ++i)        // 从上往下遍历右边界
                {
                    matrix[i][right] = cnt;
                    ++cnt;
                }
                --right;                            // 右边界收缩(左移)
            }

            if(down >= up)
            {
                for(int j = right; j >= left; --j)    // 从右往左遍历下边界
                {
                    matrix[down][j] = cnt;
                    ++cnt;
                }
                --down;                                // 下边界收缩(上移)
            }

            if(left <= right)
            {
                for(int i = down; i >= up; --i)        // 从下往上遍历左边界
                {
                    matrix[i][left] = cnt;
                    ++cnt;
                }
                ++left;                                // 左边界收缩(右移)
            }
        }
        return matrix;
    }
};

复杂度分析:要生成 n*n 的矩阵

  • 时间复杂度 [中等] 59. 螺旋矩阵 II - 图3
  • 空间复杂度 O(1):结果矩阵不计

执行结果:

执行结果:通过

执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户
内存消耗:6.5 MB, 在所有 C++ 提交中击败了 36.83% 的用户