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