Thanks the nice post from @jianchao.li.fighter


  • 0

    This problem seems really easy !

    It is just about the careful operation on the matrix index traversal !

    Here is the post refered from @jianchao.li.fighter almost no changed!

    JUST to mark this clean and clear code !
    

    Code:

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            if(matrix.empty())  return {};
            int m=matrix.size(), n=matrix[0].size();
            vector<int> spiral(m*n);
            int u=0, d=m-1, l=0, r=n-1, k=0;
            while(true){
                /** up **/
                for(int col=l; col<=r; col++)  spiral[k++]=matrix[u][col];
                if(++u>d) break;
                /** right **/
                for(int row=u; row<=d; row++)  spiral[k++]=matrix[row][r];
                if(--r<l) break;
                /** down **/
                for(int col=r; col>=l; col--)  spiral[k++]=matrix[d][col];
                if(--d<u) break;
                /** left **/
                for(int row=d; row>=u; row--)  spiral[k++]=matrix[row][l];
                if(++l>r) break;
            }
            return spiral;
        }
    };

Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.