const vector<pair<int, int>> kDir = { {0, +1}, {+1, 0}, {0, -1}, {-1, 0},};class Solution {public: vector<vector<int>> spiralMatrixIII(int rows, int cols, int rStart, int cStart) { auto inBounds = [&](const int r, const int c) -> bool { return r >= 0 && r < rows && c >= 0 && c < cols; }; auto ret = vector<vector<int>>{ vector<int>{rStart, cStart}, }; const int area = rows * cols; for (int step = 1, r = rStart, c = cStart; ret.size() < area; step += 2) { for (int k = 0; k < 4; k++) { for (int p = 0; p < (step + (k < 2 ? 0 : 1)); p++) { const auto dir = kDir[k]; r += dir.first; c += dir.second; if (inBounds(r, c)) { ret.push_back(vector<int>{r, c}); } } } } return ret; }};