螺旋矩阵 59

发布时间 2024-01-11 23:06:58作者: 云撤~


一开始确实没有思路,一堆限制条件有点无从下手。
一圈一圈走,找到边界条件,左闭右开。
循环圈数就是N/2.
然后起始和结束位置也会变化。
奇数圈时要额外判断。

点击查看代码
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> v(n,vector<int>(n,0));
int startx=0,starty=0,offset=1,count=1;
int i=0;int j=0;
int turn=n/2;int mid=n/2;
while(turn){
    i = startx;
            j = starty;
    for( j=starty;j<n-offset;j++){
        v[i][j]=count++;
    }
    for(i=startx;i<n-offset;i++){
        v[i][j]=count++;
    }
    for(;j>starty;j--){
        v[i][j]=count++;
    }
     for(;i>startx;i--){
        v[i][j]=count++;
    }
    ++startx;++starty;++offset;
    --turn;
}
if(n%2==1){v[mid][mid]=n*n;}
return v;
    }
};

这样也可以

点击查看代码
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> v(n,vector<int>(n,0));
int startx=0,starty=0,offset=1,count=1;
int i=0;int j=0;
int turn=n/2;int mid=n/2;
while(turn){
    
    for( j=starty;j<n-offset;j++){
        v[startx][j]=count++;
    }
    for(i=startx;i<n-offset;i++){
        v[i][j]=count++;
    }
    for(;j>starty;j--){
        v[i][j]=count++;
    }
     for(;i>startx;i--){
        v[i][j]=count++;
    }
    ++startx;++starty;++offset;
    --turn;
}
if(n%2==1){v[mid][mid]=n*n;}
return v;
    }
};