Description
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example
Example 1:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input:
[
[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]
Analyse
一道很经典的数组处理题目,就是把一个有序数组按照螺旋的方式输出出来,方法很多,但很容易乱,但我发现了一个挺不错的方法,就是一层一层的处理这个数组。
这样处理起来更加的有序,不容易出错。
Code
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ans;
if (matrix.size() == 0) {
return ans;
}
int row1 = 0, col1 = 0;
int row2 = matrix.size() - 1;
int col2 = matrix[0].size() - 1;
while (row1 <= row2 && col1 <= col2) {
for (int i = col1; i <= col2; i++) {
ans.push_back(matrix[row1][i]);
}
for (int i = row1 + 1; i <= row2; i++) {
ans.push_back(matrix[i][col2]);
}
if (row1 < row2 && col1 < col2) {
for (int i = col2 - 1; i > col1; i--) {
ans.push_back(matrix[row2][i]);
}
for (int i = row2; i > row1; i--) {
ans.push_back(matrix[i][col1]);
}
}
row1++;
row2--;
col1++;
col2--;
}
return ans;
}
};