> For the complete documentation index, see [llms.txt](https://algorithm.prettylog.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://algorithm.prettylog.com/top-75-leetcode-questions-to-save-your-time/problems/matrix/54.-spiral-matrix.md).

# 54. Spiral Matrix

{% embed url="<https://leetcode.com/problems/spiral-matrix/description/>" %}

```javascript
/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    const answer = [];

    const colLen = matrix[0].length;
    const rowLen = matrix.length;

    let col = -1;
    let row = 0;

    let colStep = colLen;
    let rowStep = rowLen - 1;
    while (true) {

        for (let i = 0; i < colStep; i++) {
            col++;
            answer.push(matrix[row][col]);
        }
        colStep--;
        if (rowStep === 0) break;

        for (let i = 0; i < rowStep; i++) {
            row++;
            answer.push(matrix[row][col]);
        }
        rowStep--;
        if (colStep === 0) break;

        for (let i = 0; i < colStep; i++) {
            col--;
            answer.push(matrix[row][col]);
        }
        colStep--;
        if (rowStep === 0) break;

        for (let i = 0; i < rowStep; i++) {
            row--;
            answer.push(matrix[row][col]);
        }
        rowStep--;

        if (colStep === 0) break;
    }

    return answer;
};
```
