顺序打印矩阵


顺时针打印矩阵

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

思路

定义四个边界
打印顺序:

  • 1,2,3 右边界至3
  • 4,8 12 底部边界至12
  • 16 15 14 左边界至14
  • 13 9 5 上边界至5
    每次经过一个循环,各个边界进行自增或自减操作
// 顺时针打印矩阵
func PrintMatrixClockwisely(data [][]int) {
    // 定义四个边界
    // 右边界
    right := len(data[0]) - 2
    // 底部边界
    buttom := len(data) - 2
    // 左边界
    left := 0
    // 顶边界
    top := 0

    // 定义行列索引
    row := 0
    clo := 0

    for left < len(data) {
        for row == left && clo <= right {
            fmt.Print(data[row][clo], " ")
            clo++
        }
        for clo == right+1 && row <= buttom {
            fmt.Print(data[row][clo], " ")
            row++
        }
        for row == buttom+1 && clo >= left+1 {
            fmt.Print(data[row][clo], " ")
            clo--
        }
        for clo == left && row >= top+1 {
            fmt.Print(data[row][clo], " ")
            row--
        }
        row++
        clo++
        right--
        top++
        buttom--
        left++
    }
}

文章作者: 陌无崖
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陌无崖 !
 上一篇
复制复杂链表 复制复杂链表
复制复杂链表——递归与非递归定义树的结点如下,该结点不仅有一个next指针,而且还有一个指向任意结点的指针。实现一个clone函数。该结点形成的链表形式如下图: 结点 type ComListNode struct { value
下一篇 
栈的压入和弹出 栈的压入和弹出
判断序列2是否是序列1形成栈的一种弹出序列如序列1:1,2,3,4,5 序列2:4,5,3,2,1 对于以上弹出序列可用以下的压入弹出形成,因此是子序列push(1),push(2),push(3),push(4),pop(4),push(
  目录