# 54. Spiral Matrix

Medium
Given an `m x n` `matrix`, return all elements of the `matrix` in spiral order.
Example 1:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output:
[1,2,3,6,9,8,7,4,5]
Example 2:
Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output:
[1,2,3,4,8,12,11,10,9,5,6,7]
Constraints:
• `m == matrix.length`
• `n == matrix[i].length`
• `1 <= m, n <= 10`
• `-100 <= matrix[i][j] <= 100`

### 解法

func spiralOrder(matrix [][]int) []int {
rowEnd := len(matrix) - 1
colEnd := len(matrix[0]) - 1
rowBegin := 0
colBegin := 0
ans := []int{}
for rowBegin <= rowEnd && colBegin <= colEnd {
for i := colBegin; i <= colEnd; i++ {
ans = append(ans, matrix[rowBegin][i])
}
rowBegin++
for i := rowBegin; i <= rowEnd; i++ {
ans = append(ans, matrix[i][colEnd])
}
colEnd--
if rowBegin <= rowEnd {
for i := colEnd; i >= colBegin; i-- {
ans = append(ans, matrix[rowEnd][i])
}
}
rowEnd--
if colBegin <= colEnd {
for i := rowEnd; i >= rowBegin; i-- {
ans = append(ans, matrix[i][colBegin])
}
}
colBegin++
}
fmt.Println(ans)
return ans
}