Given an m x n matrix, return all elements of the matrix in spiral order.
Example 1:

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:

Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
Constraints:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 10100 <= matrix[i][j] <= 100class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
int sr = 0,sc = 0,er = m-1,ec = n-1;
int dir = 0;
vector<int> res;
while(sr<=er&&sc<=ec)
{
if(dir==0)
{
for(int i=sc;i<=ec;i++)
res.push_back(matrix[sr][i]);
sr++;
}
else if(dir==1)
{
for(int i=sr;i<=er;i++)
res.push_back(matrix[i][ec]);
ec--;
}
else if(dir==2)
{
for(int i=ec;i>=sc;i--)
res.push_back(matrix[er][i]);
er--;
}
else if(dir==3)
{
for(int i=er;i>=sr;i--)
res.push_back(matrix[i][sc]);
sc++;
}
dir = (dir+1)%4;
}
return res;
}
};