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]
.
#include <vector>
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>> &matrix) {
vector<int> result;
if (matrix.size() == 0) return result;
int rowB = 0, rowE = matrix.size()-1;
int columnB = 0, columnE = matrix[0].size()-1;
while(true){
//left->right
for (int i = columnB; i <= columnE; i++)
result.push_back(matrix[rowB][i]);
if (++rowB > rowE)
break;
//top->bottom
for (int i = rowB; i <= rowE; i++)
result.push_back(matrix[i][columnE]);
if (--columnE < columnB)
break;
//right->left
for (int i = columnE; i >= columnB; i--)
result.push_back(matrix[rowE][i]);
if (--rowE < rowB)
break;
//bottom->top
for (int i = rowE; i >= rowB; i--)
result.push_back(matrix[i][columnB]);
if (++columnB > columnE)
break;
}//while
return result;
}
};