Tuesday, December 16, 2014

Spiral Matrix

Q:
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].

T:
Index manipulating.

A:


class Solution {
public:
    vector< in t> spiralOrder(vector< vector< int > > &matrix) {
        vector< in t> ret;
        int m=matrix.size();
        if(m == 0) {
            return ret;
        }
        int n=matrix[0].size();
        int i=0;
        int j=0;
        while(m > 0 && n > 0) {
            for(int k=0; k < n; k++) {
                ret.push_back(matrix[i][j]);
                j++;
            }
            if(m == 1) {
                break;
            }
            i++;
            j--;
            for(int k=1; k < m; k++) {
                ret.push_back(matrix[i][j]);
                i++;
            }
            if(n==1) {
                break;
            }
            j--;
            i--;
            for(int k=1; k < n; k++) {
                ret.push_back(matrix[i][j]);
                j--;
            }
            if(m <= 2) {
                break;
            }
            i--;
            j++;
            for(int k=2; k < m; k++) {
                ret.push_back(matrix[i][j]);
                i--;
            }
            j++;
            i++;
            m-=2;
            n-=2;
        }
        return ret;
    }
};

No comments:

Post a Comment