boolok(int x, int y, int n, int m){ return0 <= x && x < n && 0 <= y && y < m; } vector<int> spiralOrder(vector<vector<int>>& matrix){ int n = matrix.size(); if(n == 0) return {}; int m = matrix[0].size(); vector<int> ans(n * m); int cnt = 0, tmp = 0, inf = 0x3f3f3f3f; int x = 0, y = 0; int d[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} }; ans[cnt++] = matrix[0][0]; matrix[x][y] = inf; while(cnt < n * m) { while(ok(x + d[tmp][0], y + d[tmp][1], n, m) && matrix[x + d[tmp][0]][y + d[tmp][1]] != inf) { ans[cnt++] = matrix[x + d[tmp][0]][y + d[tmp][1]]; matrix[x + d[tmp][0]][y + d[tmp][1]] = inf; x += d[tmp][0]; y += d[tmp][1]; } tmp = (tmp + 1) % 4; } return ans; }