题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

样例

输入:
[
  [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
}