#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size(), n = matrix[0].size();
// dirc表示当前前进方向,i表示横坐标,j表示纵坐标,counter表示当前走过的方格数
int dirc = 1, i = 0, j = 0, counter = 0;
vector<int> result(m*n, -101);
while(true) {
switch(dirc) {
case 1:
if ((j<n) && (matrix[i][j] != -101)) {
result[counter++] = matrix[i][j];
matrix[i][j] = -101;
++j;
} else {
dirc = 2;
--j;
++i;
}
break;
case 2:
if ((i<m) && (matrix[i][j] != -101)) {
result[counter++] = matrix[i][j];
matrix[i][j] = -101;
++i;
} else {
dirc = 3;
--i;
--j;
}
break;
case 3:
if ((j>=0) && (matrix[i][j] != -101)) {
result[counter++] = matrix[i][j];
matrix[i][j] = -101;
--j;
} else {
dirc = 4;
++j;
--i;
}
break;
case 4:
if ((i>=0) && (matrix[i][j] != -101)) {
result[counter++] = matrix[i][j];
matrix[i][j] = -101;
--i;
} else {
dirc = 1;
++i;
++j;
}
break;
}
if (counter == (m*n)) break;
}
return result;
}
};
int main() {
int m = 5, n = 5, counter = 1;
vector<vector<int>> data(m, vector<int>(n, 0));
for (int i=0; i<m; ++i) {
for (int j=0; j<n; ++j) {
data[i][j] = counter++;
}
}
for (int i=0; i<m; ++i) {
for (int j=0; j<n; ++j) {
cout << data[i][j] << "\t";
}
cout << endl;
}
cout << "----------" << endl;
Solution solution;
vector<int> result = solution.spiralOrder(data);
cout << "[" << result[0];
for (int i=1; i<m*n; ++i) {
cout << ", " << result[i] ;
}
cout << "]" << endl;
return 0;
}
结果: