2021-04-02:給定一個正方形或者長方形矩陣matrix,實現zigzag打印。[[0,1,2

2021-04-02:給定一個正方形或者長方形矩陣matrix,實現zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印順序是0,1,3,6,4,2,5,7,8。java

福大大 答案2021-04-02:git

兩個for循環嵌套。
外層循環。先遍歷第一列,再遍歷不包含列號爲0的最後一行。每循環一次,修改標誌位。
內層循環。根據標誌位判斷,從左下到右上,仍是從右上到左下。github

代碼用golang編寫。代碼以下: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
    }
}

執行結果以下:
在這裏插入圖片描述ide


左神java代碼
評論code

相關文章
相關標籤/搜索