代码:力扣54.螺旋矩阵
难度:中等 .
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 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]
package main
func spiralOrder(matrix [][]int) []int {
resArr:=[]int{}//定义一个返回结果的切片
m:=len(matrix)//
n:=len(matrix[0])
if m==0||n==0{
return resArr
}
//记录移动的位置,顺时针是右下左上
xArray:=[4]int{0,1,0,-1}
yArray:=[4]int{1,0,-1,0}
count:=m*n
//定义一个辅助数组,默认是false,访问之后标记为true并且不再访问
//go语言的二位数组的初始化,需要注意。
visited:=make([][]bool,m)
for i:=0;i
visited[i]=make([]bool,n)
}
x,y:=0,0
temp:=0
xindex,yindex:=0,0
for i:=0;i
temp=matrix[x][y]
resArr=append(resArr,temp)
visited[x][y]=true//标记为已经访问过
newX,newY:=x+xArray[xindex],y+yArray[yindex]//移动至下一位的位置
//如果下一位已经访问过或者数组越界,我们需要修改方向
if newX<0||newY<0||newX>=m||newY>=n||visited[newX][newY]==true{
xindex=(xindex+1)%4
yindex=(yindex+1)%4
}
//下一次访问的数组的位置
x=x+xArray[xindex]
y=y+yArray[yindex]
}
return resArr
}



