题目:
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解法:
一层一层的剥
func spiralOrder(matrix [][]int) []int {
up, down := 0, len(matrix) - 1
left, right := 0, len(matrix[0]) - 1
ans := make([]int, len(matrix) * len(matrix[0]) )
index := 0
for left <= right && up <= down {
for column := left; column <= right; column ++ {
ans[index] = matrix[up][column]
index ++
}
for row := up + 1; row <= down; row ++ {
ans[index] = matrix[row][right]
index ++
}
// up和right已经遍历过了,矩形少了上面和右边的边,所以等号条件不成立了
if left < right && up < down {
for column := right - 1; column >= left; column -- {
ans[index] = matrix[down][column]
index ++
}
for row := down - 1; up < row; row -- {
ans[index] = matrix[row][left]
index ++
}
}
// 去掉四条边
up ++
down --
left ++
right --
}
return ans
}