[LeetCode] 59. 螺旋矩阵 II

给定一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

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

思路:

同样是每条边的访问顺序恒定, 可以提前初始化 n*n 的方阵,然后收缩各边按逐个填入数字。

AC代码:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        // 初始化全0的n阶方阵
        vector<vector<int>> matrix(n, vector<int>(n, 0));
        
        int num = 1;
        int target = n * n;
        
        int top = 0, bottom = n - 1;
        int left = 0, right = n - 1;
        
        while (num <= target) {
            // 上边:从左到右
            for (int j = left; j <= right && num <= target; j++) {
                matrix[top][j] = num++;
            }
            top++;
            
            // 右边:从上到下
            for (int i = top; i <= bottom && num <= target; i++) {
                matrix[i][right] = num++;
            }
            right--;
            
            // 下边:从右到左
            for (int j = right; j >= left && num <= target; j--) {
                matrix[bottom][j] = num++;
            }
            bottom--;
            
            // 左边:从下到上
            for (int i = bottom; i >= top && num <= target; i--) {
                matrix[i][left] = num++;
            }
            left++;
        }
        
        return matrix;
    }
};Code language: C++ (cpp)