不懂自己这么水的题居然WA了这么多次

而且 为啥要设置flag 反正都是顺时针

自己写的

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int>ans;
        if(matrix.empty())
            return ans;
        int flag=0;
        int x=0,y=0;
        int n=matrix[0].size();
        int m=matrix.size();
        if(m==1)
            return matrix[0];
        while(1){
            if(matrix[x][y]==INT_MAX)
                break;
            if(flag==0){
                for(;y<n&&matrix[x][y]!=INT_MAX;y++){
                    ans.push_back(matrix[x][y]);
                    matrix[x][y]=INT_MAX;
                }
                y--;x++;
                flag=1;
            }
            else if(flag==1){
                for(;x<m&&matrix[x][y]!=INT_MAX;x++){
                    ans.push_back(matrix[x][y]);
                    matrix[x][y]=INT_MAX;
                }
                x--;y--;
                flag=2;
            }
            else if(flag==2){
                for(;y>=0&&matrix[x][y]!=INT_MAX;y--){
                    ans.push_back(matrix[x][y]);
                    matrix[x][y]=INT_MAX;
                }
                x--;y++;
                flag=3;
            }
            else if(flag==3){
                for(;x>=0&&matrix[x][y]!=INT_MAX;x--){
                    ans.push_back(matrix[x][y]);
                    matrix[x][y]=INT_MAX;
                }
                x++;y++;
                flag=0;
            }
        }
        return ans;
    }
};

改的

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int>ans;
        if(matrix.empty())
            return ans;
        int x=0,y=0;
        int n=matrix[0].size();
        int m=matrix.size();
        while(x<m&&y<n){
            for(int i=y;i<n;i++){
                ans.push_back(matrix[x][i]);
            }
            for(int i=x+1;i<m;i++){
                ans.push_back(matrix[i][n-1]);
            }

            for(int i=n-2;i>=y&&x!=m-1;i--){
                ans.push_back(matrix[m-1][i]);
            }
            for(int i=m-2;i>x&&y!=n-1;i--){
                ans.push_back(matrix[i][y]);
            }
            x++;y++;
            m--;n--;

        }
        return ans;
    }
};