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]
.
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> results;
if(matrix.size() == 0) return results;
if(matrix.size() == 1) return matrix[0];
int dimensionY = matrix.size();
int dimensionX = matrix[0].size();
if(dimensionX == 1) {
for(int ii = 0; ii < dimensionY; ii ++)
results.push_back(matrix[ii][0]);
return results;
}
int rount = (dimensionX > dimensionY ? dimensionY : dimensionX) / 2;
int center = (dimensionX > dimensionY ? dimensionY : dimensionX) % 2;
for(int ii = 0; ii < rount; ii ++) {
for(int jj = ii; jj < dimensionX - ii - 1; jj ++) {
results.push_back(matrix[ii][jj]);
}
for(int jj = ii; jj < dimensionY - ii - 1; jj ++) {
results.push_back(matrix[jj][dimensionX - ii - 1]);
}
for(int jj = ii; jj < dimensionX - ii - 1; jj ++) {
results.push_back(matrix[dimensionY - ii - 1][dimensionX - jj - 1]);
}
for(int jj = ii; jj < dimensionY - ii - 1; jj ++) {
results.push_back(matrix[dimensionY - jj - 1][ii]);
}
}
if(center == 1) {
if(dimensionX % 2 == 1) {
for(int ii = rount; ii < dimensionY - rount; ii ++) {
results.push_back(matrix[ii][dimensionX / 2]);
}
}
else {
for(int ii = rount; ii < dimensionX - rount; ii ++) {
results.push_back(matrix[dimensionY / 2][ii]);
}
}
}
return results;
}
};