/* * @LastEditTime: 2026-05-09 22:15:48 */ classSolution { private: int n, m, k; vector<vector<int>> grid;
voidinit(vector<vector<int>>& grid, int k){ n = grid.size(); m = grid[0].size(); this->grid = move(grid); this->k = k; }
voidrotate(int th){ int m = this->m - 2 * th; int n = this->n - 2 * th; int all = (m + n) * 2 - 4; int k = this->k % all; vector<int> round; round.reserve(all);
for (int j = 0; j < m - 1; j++) { round.push_back(grid[th][th + j]); } for (int i = 0; i < n - 1; i++) { round.push_back(grid[th + i][th + m - 1]); } for (int j = m - 1; j > 0; j--) { round.push_back(grid[th + n - 1][th + j]); } for (int i = n - 1; i > 0; i--) { round.push_back(grid[th + i][th]); }
reverse(round.begin(), round.end()); reverse(round.begin(), round.begin() + all - k); reverse(round.begin() + all - k, round.end());
int idx = 0; for (int j = 0; j < m - 1; j++) { grid[th][th + j] = round[idx++]; } for (int i = 0; i < n - 1; i++) { grid[th + i][th + m - 1] = round[idx++]; } for (int j = m - 1; j > 0; j--) { grid[th + n - 1][th + j] = round[idx++]; } for (int i = n - 1; i > 0; i--) { grid[th + i][th] = round[idx++]; } } public: vector<vector<int>> rotateGrid(vector<vector<int>>& grid, int k) { init(grid, k);