Description
Given a positive integer n
, generate an n x n
matrix
filled with elements from 1
to n2
in spiral order.
Example 1:
Input: n = 3 Output: [[1,2,3],[8,9,4],[7,6,5]]
Example 2:
Input: n = 1 Output: 1
Constraints:
1 <= n <= 20
Code
Time Complexity: , Space Complexity:
use code from Spiral Matrix, modify it a little bit, use count
to represents array elements to be added.
注意起始點在 i = 0, j = -1
。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<int> steps = {n, n - 1};
vector<vector<int>> dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
vector<vector<int>> res(n, vector<int>(n, 0));
int d = 0, i = 0, j = -1, counter = 0;
while(steps[d % 2]) {
for(int k = 0; k < steps[d % 2]; k++) {
i += dir[d][0];
j += dir[d][1];
counter++;
res[i][j] = counter;
}
steps[d % 2]--;
d = (d + 1) % 4;
}
return res;
}
};