【LeetCode-数组】螺旋矩阵 II

题目描述

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

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

题目链接: https://leetcode-cn.com/problems/spiral-matrix-ii/

思路

设置 4 个边界:l, r, t, b,分别代表左右上下的边界,然后从左到右、从上到下、从右到左、从下到上填充数组,设置一个变量 num 初始化为 1,表示当前要填充的数字,每填充一次 num+1。每填充一行或一列后要对边界进行更新。例如,从左到右填充一行后,此时 t 要更新为 t+1,因为少了一行,其他类似。

代码如下:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> v(n, vector<int>(n, 0));
        int l = 0, r = n-1, t = 0, b = n-1;
        int num = 1;
        while(num<=n*n){
            for(int i=l; i<=r; i++) v[t][i] = num++;
            t++;

            for(int i=t; i<=b; i++) v[i][r] = num++;
            r--;
            
            for(int i=r; i>=l; i--) v[b][i] = num++;
            b--;
            
            for(int i=b; i>=t; i--) v[i][l] = num++;
            l++;
        }
        return v;
    }
};
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

参考

https://leetcode-cn.com/problems/spiral-matrix-ii/solution/spiral-matrix-ii-mo-ni-fa-she-ding-bian-jie-qing-x/

猜你喜欢

转载自www.cnblogs.com/flix/p/13166885.html