2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。
福大大 答案2021-04-02:
两个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
}
}
执行结果如下: