Description
Submission
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<vector<int>> dir{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
vector<int> res;
if(matrix.empty()) return res;
int padding = 0;
int nDir = 0;
int rowMax = matrix.size() - 1;
int colMax = matrix[0].size() - 1;
for(int i = 0, j = 0; true; ) {
res.push_back(matrix[i][j]);
if((dir[nDir][1] == 1 && j + padding == colMax) ||
(dir[nDir][0] == 1 && i + padding == rowMax) ||
(dir[nDir][1] == -1 && j == padding) ||
(dir[nDir][0] == -1 && i == padding)) {
nDir++;
if(nDir == 3) padding++;
if(nDir == 4) nDir = 0;
}
i += dir[nDir][0];
j += dir[nDir][1];
if((dir[nDir][1] == 1 && j + padding > colMax) ||
(dir[nDir][0] == 1 && i + padding > rowMax) ||
(dir[nDir][1] == -1 && j < padding) ||
(dir[nDir][0] == -1 && i < padding)) {
break;
}
}
return res;
}
};