1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| package main
import "fmt"
func spiralOrder(matrix [][]int) []int { var result []int var cl []int var cc [][]int
for i, m := range matrix { matrix_len := len(matrix)
if i == 0 { result = append(result, m...) }
if i > 0 && i < matrix_len-1 { m_len := len(m)
result = append(result, m[m_len-1])
if matrix_len >= 3 && m_len >= 2 { cl = append([]int{m[0]}, cl...) }
if m_len >= 3 {
cc = append(cc, m[1:m_len-1]) } }
if matrix_len > 1 && i == matrix_len-1 { result = append(result, reverseInts(m)...) } }
result = append(result, cl...) if len(cc) > 0 { result = append(result, spiralOrder(cc)...) }
return result }
func reverseInts(m []int) []int { var r []int
for i := range m { r = append(r, m[len(m)-1-i]) }
return r }
func main() { fmt.Println(reverseInts([]int{1, 2, 3}))
fmt.Println(spiralOrder([][]int{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, }))
fmt.Println(spiralOrder([][]int{ {2, 5}, {8, 4}, {0, -1}, })) }
|