题解 | #螺旋矩阵#
螺旋矩阵
http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
gogogo
需要注意到矩阵为空、单行、单列的情况
func spiralOrder( matrix [][]int ) []int {
// write code here
res := []int{}
//判断矩阵是否为空:为空时返回
if len(matrix) == 0{
return res
}
//初始化
top := 0
bottom := len(matrix)-1
left := 0
right := len(matrix[0])-1
//矩阵不为空时进行循环遍历,首先从左到右,再从上到下,再从右到左,再从下到上
for top <= bottom && left <= right{
//当上下重叠或者左右重叠时终止循环
for i := left;i <= right;i++{
res = append(res,matrix[top][i])
} //从左到右遍历,变的是列
top++ //每次遍历完下移一行,为下一个遍历做准备
for i := top;i <= bottom;i++{
res = append(res,matrix[i][right])
} //从上到下遍历,变的是行。单行时未执行该循环
right-- //每遍历完左移一列,为下一个遍历做准备
if top > bottom || left > right{
break
} //单行单列,后续不用执行
for i := right;i >= left;i--{
res = append(res,matrix[bottom][i])
} //从右向左遍历,变的是列
bottom-- //每遍历一次初始位都要左移一位,为下次遍历做准备
for i := bottom;i >= top;i--{
res = append(res,matrix[i][left])
} //从下向上遍历,变的是行
left++ //每一次遍历初始位都要上移一位,为下次遍历做准备
}
return res
}