54 - Spiral Matrix
#medium
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]
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
int v_size = m * n;
int startx = 0, starty = 0, offset = 1, loop, i , j, k = 0;
vector<int> v_result( v_size, 0 );
if ( m < n ) loop = m / 2;
else loop = n / 2;
for ( ;loop > 0; loop--) {
i = startx;
j = starty;
for ( i = startx; i < n - offset; i++ ) {
v_result[k] = matrix[j][i];
k++;
}
for ( j = starty; j < m - offset; j++ ) {
v_result[k] = matrix[j][i];
k++;
}
for ( ; i > startx; i-- ) {
v_result[k] = matrix[j][i];
k++;
}
for ( ; j > starty; j-- ) {
v_result[k] = matrix[j][i];
k++;
}
startx++;
starty++;
offset++;
}
if ( m < n && (m % 2 == 1 ) ) {
for ( i = startx, j = starty; i < n - offset + 1; i++ ) {
v_result[k] = matrix[j][i];
k++;
}
}
else if ( m > n && (n % 2 == 1 ) ) {
for ( i = startx, j = starty; j < m - offset + 1; j++ ) {
v_result[k] = matrix[j][i];
k++;
}
}
else if ( m == n && (n % 2 == 1 ) ) {
v_result[k] = matrix[startx][startx];
}
return v_result;
}
};