## Question

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]]
```

## Algorithm

This question is much similar to the previous one Spiral Matrix. You need to construct a board and traverse in a spiral order and fill out each blank with a increasing number until all the number are used(or the 2-D array is full).

At each step, you need to care about if the top/bottom or left/right boundary is in a valid relative position. By this I mean, we are modifying those boundaries, we need to keep top is less or equal to the bottom to avoid the number goes back and overlapping.

## Code

class Solution { public int[][] generateMatrix(int n) { int[][] board = new int[n][n]; int num = 1; int top = 0, bottom = n - 1; int left = 0, right = n - 1; while (n * n >= num) { if (top <= bottom) { for (int i = left; i <= right; i++) { board[top][i] = num++; } top++; } if (right >= left) { for (int i = top; i <= bottom; i++) { board[i][right] = num++; } right--; } if (top <= bottom) { for (int i = right; i >= left; i--) { board[bottom][i] = num++; } bottom--; } if (right >= left) { for (int i = bottom; i >= top; i--) { board[i][left] = num++; } left++; } } return board; } }