定义四个变量分别代表矩阵当前的范围:up、down、left、right 按上、下、左、右段遍历,遍历一段,缩小一段的范围,同时判断范围是否越界
func spiralOrder(matrix [][]int) (ans []int) {
if len(matrix) == 0 || len(matrix[0]) == 0 {
return
}
t, b, l, r := 0, len(matrix)-1, 0, len(matrix[0])-1
for {
// 从左到右,遍历最上面一行
for i := l; i <= r; i++ {
ans = append(ans, matrix[t][i])
}
t++
if t > b {
return
}
// 从上到下,遍历最右边一列
for j := t; j <= b; j++ {
ans = append(ans, matrix[j][r])
}
r--
if l > r {
return
}
// 从右到左,遍历最下面一行
for i := r; i >= l; i-- {
ans = append(ans, matrix[b][i])
}
b--
if t > b {
return
}
// 从下到上,遍历最左边一列
for j := b; j >= t; j-- {
ans = append(ans, matrix[j][l])
}
l++
if l > r {
return
}
}
return
}