59 - Spiral Matrix II

#medium
Given a positive i#teger n, generate an n x n matrix filled with elements from 1 to n2 in spiral order.

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> matrix(n, vector<int>(n, 0));
        int startx = 0, starty = 0, number = 1, offset = 1;
        int i, j;
        int mid = n / 2;
        for ( int loop = n / 2; loop > 0; loop-- ) {
            i = startx;
            j = starty;
            for ( j = starty; j < n - offset; j++ ) {
                matrix[i][j] = number;
                number++;
            }

            
            for ( i = startx; i < n - offset; i++ ) {
                matrix[i][j] = number;
                number++;
            }

            for ( ;j > starty; j-- ) {
                matrix[i][j] = number;
                number++;
            }
    

            for ( ;i > startx; i-- ) {
                matrix[i][j] = number;
                number++;
            }

            // key point
            startx++;
            starty++;
            offset++;
        }

        if ( n % 2 == 1 ) matrix[mid][mid] = number;
        return matrix;
    }
};