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;
    }
};

Source