题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
解题思路
- 定义上下左右四个边界,按顺序循环打印
- 注意判断结束条件,四个边界某两个相遇时即结束
代码实现
func spiralOrder(matrix [][]int) []int {
res := make([]int, 0)
if len(matrix) == 0 || len(matrix[0]) == 0 {
return res
}
left := 0
right := len(matrix[0]) - 1
top := 0
bottom := len(matrix) - 1
for {
for i := left; i <= right; i++ {
res = append(res, matrix[top][i])
}
top++
if top > bottom {
break
}
for i := top; i <= bottom; i++ {
res = append(res, matrix[i][right])
}
right--
if right < left {
break
}
for i := right; i >= left; i-- {
res = append(res, matrix[bottom][i])
}
bottom--
if bottom < top {
break
}
for i := bottom; i >= top; i-- {
res = append(res, matrix[i][left])
}
left++
if left > right {
break
}
}
return res
}