1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if (matrix.empty() || matrix[0].empty()) return {}; enum D {N, E, W, S}; int dx[] = {0, 1, -1, 0}, dy[] = {-1, 0, 0, 1}; int n = matrix.size(), m = matrix[0].size(); int size = n * m; D d = E; vector<int> res; for (int i = 0, row = 0, col = 0, t = -1, b = n, l = -1, r = m; i < size; ++i) { res.push_back(matrix[row][col]); switch (d) { case N: if (row + dy[d] == t) { d = E; ++l; } break; case E: if (col + dx[d] == r) { d = S; ++t; } break; case W: if (col + dx[d] == l) { d = N; --b; } break; case S: if (row + dy[d] == b) { d = W; --r; } break; default: break; } row += dy[d]; col += dx[d]; } return res; } };
|