Table of Contents
Problem Statement
This question Spiral Matrix II is very similar to Spiral Matrix
Please try to attempt the above question to get a better idea before solving this problem.
In this question, we are asked to generate a matrix of size n*n having elements in spiral order, and only n is given as input.

Algorithm
If we observe clearly, we can notice that no matter what n is, the order of directions for spirality will always be
east->south->west->north->east->… and so on
Hence, we can use 4 pointers and traverse an empty/ predefined 2D vector as per the spiral directionality and store a number and increment the number by 1.
Use 4 pointers – l for left, r for right, t for top, and d for down;
Cases:
- direction is east:
- traverse all columns from left to right, in the top row
- store num and increment num each time
- increment top by 1
- change direction to the south
- direction is south
- traverse all rows from top to down, in the rightmost column
- store num and increment num each time
- decrease right by 1
- change direction to the west
- direction is west
- traverse all columns from right to left, in the down row
- store num and increment num each time
- decrease down by 1
- change direction to the west
- direction is north
- traverse all rows from down to the top, in the leftmost column
- store num and increment num each time
- increment left by 1
- change direction to the west
we can iterate this till left <= right and top <= down in a while loop
The picture below depicts the algorithm

Code
Note: Pointers are – l for left, r for right, t for top, d for down
C++ program for Spiral Matrix II Leetcode Solution
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
char dir = 'E';
vector<vector<int>> spiralMatrix(n, vector<int>(n,0));
int num=1;
int l=0, t=0, r=n-1, d=n-1;
while(l<=r && t<=d) {
if(dir == 'E') {
for(int i=l; i<=r; i++) {
spiralMatrix[t][i] = num++;
}
t++;
dir='S';
}
else if(dir=='S') {
for(int i=t; i<=d; i++) {
spiralMatrix[i][r] = num++;
}
r--;
dir='W';
}
else if(dir=='W') {
for(int i=r; i>=l; i--) {
spiralMatrix[d][i] = num++;
}
d--;
dir='N';
}
else {
for(int i=d; i>=t; i--) {
spiralMatrix[i][l] = num++;
}
l++;
dir='E';
}
}
return spiralMatrix;
}
};Java program for Spiral Matrix II Leetcode Solution
class Solution {
public int[][] generateMatrix(int n) {
int[][] spiralMatrix = new int[n][n];
int num=1;
char dir='E';
int l=0, t=0, r=n-1, d=n-1;
while(l<=r && t<=d) {
if(dir == 'E') {
for(int i=l; i<=r; i++) {
spiralMatrix[t][i] = num++;
}
t++;
dir='S';
}
else if(dir=='S') {
for(int i=t; i<=d; i++) {
spiralMatrix[i][r] = num++;
}
r--;
dir='W';
}
else if(dir=='W') {
for(int i=r; i>=l; i--) {
spiralMatrix[d][i] = num++;
}
d--;
dir='N';
}
else {
for(int i=d; i>=t; i--) {
spiralMatrix[i][l] = num++;
}
l++;
dir='E';
}
}
return spiralMatrix;
}
}Complexity Analysis for Spiral Matrix II Leetcode Solution
Time Complexity:
Here, n is given input and we are iterating over the n*n matrix in spiral form. Hence, O(n^2)
Space Complexity:
We have used constant extra space for storing num, hence O(1)
Reference: https://en.wikipedia.org/wiki/Spiral