给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。
  KRe60ogUm4le 2024年05月31日 28 0

给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。

两个for循环嵌套。
外层循环。先遍历第一列,再遍历不包含列号为0的最后一行。每循环一次,修改标志位。
内层循环。根据标志位判断,从左下到右上,还是从右上到左下。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
    arr := [][]int{
        {0, 1, 2},
        {3, 4, 5},
        {6, 7, 8}}
    printMatrixZigZag(arr)
}
func printMatrixZigZag(matrix [][]int) {
    row := len(matrix)
    col := len(matrix[0])
    fromUp := false
    //遍历第一列
    for i := 0; i < row; i++ {
        if fromUp {
            //找最右上的位置
            j := 0
            for ; i-j >= 0 && j < col; j++ {
            }
            j--

            //右上到左下
            for ; j >= 0; j-- {
                fmt.Print(matrix[i-j][0+j], " ")
            }
        } else {
            //左下到右上
            for j := 0; i-j >= 0 && j < col; j++ {
                fmt.Print(matrix[i-j][0+j], " ")
            }
        }
        fromUp = !fromUp
    }

    //遍历最后一行
    for j := 1; j < col; j++ {
        if fromUp {
            //找最右上的位置
            i := 0
            for ; row-1-i >= 0 && j+i < col; i++ {
            }
            i--

            //右上到左下
            for ; i >= 0; i-- {
                fmt.Print(matrix[row-1-i][j+i], " ")
            }
        } else {
            //左下到右上
            for i := 0; row-1-i >= 0 && j+i < col; i++ {
                fmt.Print(matrix[row-1-i][j+i], " ")
            }
        }
        fromUp = !fromUp
    }
}

执行结果如下:

2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年05月31日 0

暂无评论

推荐阅读
  KRe60ogUm4le   2024年05月31日   30   0   0 算法leetcodepython
  KRe60ogUm4le   2024年05月31日   29   0   0 算法leetcodepython
KRe60ogUm4le
最新推荐 更多

2024-05-31