【54. 螺旋矩阵】遇0或左侧边界换方向/收缩边界

阅读 32

2022-03-30

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int xx[4]={0,1,0,-1};
        int yy[4]={1,0,-1,0};
        vector<int> res;
        int m=(int)matrix.size();//求矩阵行数
        // int m=sizeof(matrix)/sizeof(int);这个算出来不对,不知道为啥
        int n=(int)matrix[0].size();//求矩阵列数
        for(int i=0;i<m;i++)
        {
            matrix[i].push_back(0);
        }
        vector<int> zero;
        for(int i=0;i<=n;i++)
        {
            zero.push_back(0);
        }
        matrix.push_back(zero);
        int step=0;
        int i=0,j=0,k=0;
        while(step!=m*n)
        {
            step++;
            res.push_back(matrix[i][j]);
            matrix[i][j]=0;
            i+=xx[k];
            j+=yy[k];
            if(j==-1||matrix[i][j]==0)//最外圈左边记得判断,因为没加0,否则会越界!出现-1
            {
                i-=xx[k];
                j-=yy[k];
                k=(k+1)%4;
                i+=xx[k];
                j+=yy[k];
            }
        }
        return res;
    }
};

精彩评论(0)

0 0 举报