1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> ret(n, vector<int>(n, 0)); int dir[][2]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; int d = 0; int m = 0, k = 0; for(int i = 1; i <= n * n; ++i) { ret[m][k] = i; int nextm = m + dir[d][0]; int nextk = k + dir[d][1]; if(nextm < 0 || nextm >= n || nextk < 0 || nextk >= n || ret[nextm][nextk] > 0) d = (d + 1) % 4; m += dir[d][0]; k += dir[d][1]; } return ret; } };
|