美文网首页
54. Spiral Matrix 螺旋矩阵

54. Spiral Matrix 螺旋矩阵

作者: sarto | 来源:发表于2022-04-07 10:02 被阅读0次

    题目

    给定一个 m*n 的矩阵,以顺时针螺旋的形式返回所有的元素。

    image.png

    解析

    走法是固定给出的,只需要确定终止条件即可。对于这个 m*n 的矩阵,我们先确定上下左右,四条边界,即top,bottom,left,right。螺旋在每一个边界上的方向都是固定的。首先,我们在 top 上移动,当移动到右边界时,判断bottom是否大于top,如果是,就调整方向沿着 right 移动,如果不是,说明已经终结。

    伪代码

    top = 0
    bottom = m-1
    left = 0
    right = n-1
    // top 移动
    for {
    for i=left;i<=right;i++
      rst+=matrix[top][i]
    top--
    if bottom < top
      return
    for i=top;i<=bottom;i++
      rst+=matrix[i][right]
    right--
    if right < left
      return
    for i=right;i>=left; i--
      rst+=matrix[bottom][i]
    bottom--
    if bottom < top
      return
    for i= bottom;i>=top;i--
      rst+=matrix[left][i]
    left--
    if right<left
      return
    }
    

    代码

    func spiralOrder(matrix [][]int) []int {
        nums := make([]int, len(matrix)*len(matrix[0]))
        cnt:=0
        top,bottom,left,right := 0,len(matrix)-1, 0, len(matrix[0])-1
        for {
            for i:=left;i<=right;i++ {
                nums[cnt] = matrix[top][i]
                cnt++
            }
            top++
            if bottom < top {
                break
            }
            
            for i:=top;i<=bottom;i++ {
                nums[cnt] = matrix[i][right]
                cnt++
            }
            right--
            if right < left {
                break
            }
            
            for i:=right;i>=left;i-- {
                nums[cnt]=matrix[bottom][i]
                cnt++
            }
            bottom--
            if bottom < top {
                break
            }
            
            for i:=bottom;i>=top;i-- {
                nums[cnt] = matrix[i][left]
                cnt++
            }
            left++
            if right < left {
                break
            }
        }
        return nums
    }
    
    image.png

    相关文章

      网友评论

          本文标题:54. Spiral Matrix 螺旋矩阵

          本文链接:https://www.haomeiwen.com/subject/tmejsrtx.html