题目

题解

就是分四种情况,从左到右,上到下,右到左,下到上循环遍历,和54题类似

  • 时间复杂度$O(nm)$
  • 空间复杂度$O(nm)$
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int>(n));//初始化输出的矩阵
        int u=0, d=n-1, l=0, r=n-1;//设定边界值
        int num=1;//设定第一个数
        while(num<=n*n){//设定总共迭代的次数,即边界条件
            for(int i=l;i<=r;i++) res[u][i]=num++;//从左到右
            u++;
            for(int i=u;i<=d;i++) res[i][r]=num++;//从上到小
            r--;
            for(int i=r;i>=l;i--) res[d][i]=num++;//从右到左
            d--;
            for(int i=d;i>=u;i--) res[i][l]=num++;//从下到上
            l++;
        }
        return res;
    }
};