classSolution { public: vector<int> ans; vector<pair<int, int>> dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; vector<int> spiralArray(vector<vector<int>> &array){ if (array.empty() || array[0].empty()) { return {}; } int up = 0, left = 0; int down = array.size() - 1; int right = array[0].size() - 1; int flag = 0; int i = 0, j = 0; while (up <= down && left <= right) { ans.push_back(array[i][j]);
if (flag == 0 && j == right) { flag = 1; up++; } elseif (flag == 1 && i == down) { flag = 2; right--; } elseif (flag == 2 && j == left) { flag = 3; down--; } elseif (flag == 3 && i == up) { flag = 0; left++; } i += dir[flag].first; j += dir[flag].second; } return ans; } };