螺旋矩阵

123 阅读1分钟

image.png

把螺旋矩阵看做若干个外圈顺时针旋转

屏幕截图 2025-02-07 112955.png

然后取顶部为t,底部为b,左右两边为lr,走第一圈先从顶部一层从左到右,再从顶部二层右边一列从上到下,在底部一层从右到左,走到左边一列从下到上,再到内圈以此类推,用到循环。

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
      vector<vector<int>> mat(n, vector<int>(n));
      int num = 1, tar = n * n;
      int l=0,t=0,r=n-1,b=n-1;
      while(num<=tar){
      for(int i=l;i<=r;i++) mat[t][i]=num++;
      t++;//第一圈的从左往右走完
      for(int i=t;i<=b;i++) mat[i][r]=num++;
      r--;
      for(int i=r;i>l;i--) mat[b][i]=num++;
      b--;
      for(int i=b;i>t;i--) mat[i][l]=num++;
      l++;
    }
    return mat;
};