54. 螺旋矩阵

54. 螺旋矩阵

54. 螺旋矩阵

func spiralOrder(matrix [][]int) []int {
    ret := []int{}
    if len(matrix) == 0 {
        return ret
    }

    left:=0
    right:=len(matrix[0])-1
    top:=0
    bottom:=len(matrix)-1

    for {
 

        for j:=left;j<=right;j++ {
            ret = append(ret, matrix[top][j])
        }
        top++
        if top > bottom {
            break
        }

        for i:=top; i <= bottom;i++ {
            ret = append(ret, matrix[i][right])
        }
        right--
        if right < left {
            break
        }

        for j:=right;j >= left;j-- {
            ret = append(ret, matrix[bottom][j])
        }
        bottom--
        if bottom < top {
            break
        }

        for i := bottom;i >= top;i-- {
            ret = append(ret, matrix[i][left])
        }
        left++
        if left > right {
            break
        }
    }

    return ret
}

看了题解,基本就是两种做法,一种是限制左右上下四个边界的数值,达到在各个方向移动时不超过限制

另外一种是dfs,设置四个遍历方向,循环往复,直到所有的块被遍历完全


本站总访问量次 本站访客数人次 本文总阅读量