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
}
​