题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
样例
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
golang 代码
func printMatrix(matrix [][]int) []int {
//返回值
var ans []int
//如果输入空
if len(matrix) == 0 || len(matrix[0]) == 0 {
return ans
}
//判断是否走过
var mymap = make([][]bool,1000)
for i := 0 ; i < 1000 ; i++ {
mymap[i] = make([]bool, 1000)
}
//右下左上
var x = []int{ 0, 1, 0, -1}
var y = []int{ 1, 0, -1, 0}
//j为走的方向,n和m代表实际位置
var j,n,m int
//左上([0][0])开始
mymap[n][m] = true
ans = append(ans,matrix[n][m])
for {
j %= 4
a := n + x[j]
b := m + y[j]
//一个方向走
if a >= 0 && a < len(matrix) && b >= 0 && b < len(matrix[0]) && mymap[a][b] == false {
ans = append(ans,matrix[a][b])
mymap[a][b] = true
n = a
m = b
}else{
//一个方向走完
j++
}
if len(ans) >= len(matrix) * len(matrix[0]) {
break
}
}
return ans
}