Given an integer A, generate a square matrix filled with elements from 1 to A2 in spiral order.

See problem at leetcode

For example:

```
A = 2
```

Then matrix would be

```
1 2
4 3
```

```
A = 3
```

Then matrix would be

```
1 2 3
8 9 4
7 6 5
```

## Idea

To generate the spiral order matrix, you should traverse the matrix layer by layer. First, generate the outer layer, then generate the one layer down, and so on.

Here, I have used 4 variable to track the row and column which we would like to fill.

- row-1
- column-n
- row-n
- column-1
- row-2
- column-(n-1)
- row-(n-1) ..... ..... and so on

```
vector<vector<int> > Solution::generateMatrix(int A) {
vector<vector<int>>ans(A,vector<int>(A,0));
int rowBegin = 0;
int colBegin = 0;
int rowEnd = A-1;
int colEnd = A-1;
int counter = 1;
while(rowBegin<=rowEnd && colBegin<=colEnd){
// top left to top right
for(int i=colBegin; i<=colEnd; i++)
ans[rowBegin][i] = counter++;
rowBegin++;
// top right to bottom right
for(int i=rowBegin; i<=rowEnd; i++)
ans[i][colEnd] = counter++;
colEnd--;
// bottom right to bottom left
for(int i=colEnd; i>=colBegin; i--)
ans[rowEnd][i] = counter++;
rowEnd--;
// bottom left to top left
for(int i=rowEnd; i>=rowBegin; i--)
ans[i][colBegin] = counter++;
colBegin++;
}
return ans;
}
```

## Discussion (0)