给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
void recursion(vector<vector<int>> &matrix, int p1x, int p1y, int p2x, int p2y, vector<int> &output, int idx) {
if(p1x > p2x || p1y > p2y)
return;
if(p1x == p2x) {
for(int i = p1y; i <= p2y; i++)
output[idx++] = matrix[p1x][i];
return;
}
if(p1y == p2y) {
for(int i = p1x; i <= p2x; i++)
output[idx++] = matrix[i][p2y];
return;
}
for(int i = p1y; i < p2y; i++)
output[idx++] = matrix[p1x][i];
for(int i = p1x; i < p2x; i++)
output[idx++] = matrix[i][p2y];
for(int i = p2y; i > p1y; i--)
output[idx++] = matrix[p2x][i];
for(int i = p2x; i > p1x; i--)
output[idx++] = matrix[i][p1y];
recursion(matrix, p1x + 1, p1y + 1, p2x - 1, p2y - 1, output, idx);
}
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty())
return {};
int xlen = matrix.size();
int ylen = matrix[0].size();
vector<int> output(xlen * ylen , 0);
recursion(matrix, 0, 0, xlen - 1, ylen - 1, output, 0);
return output;
}