把螺旋矩阵看做若干个外圈顺时针旋转
然后取顶部为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;
};