Go语言教程之边写边学:数据结构与算法:生成数字折线矩阵

绘制2D矩阵,按数字折线顺序打印给定矩阵的所有元素。该数字必须从0开始,然后以折线格式增加,并且必须绘制一个正方形。
实现代码:
package main
 
import (
    "fmt"
)
 
func zigzag(n int) []int {
    zz := make([]int, n*n)
    i := 0
    n2 := n * 2
    for p := 1; p <= n2; p++ {
        x := p - n
        if x < 0 {
            x = 0
        }
        y := p - 1
        if y > n-1 {
            y = n - 1
        }
        j := n2 - p
        if j > p {
            j = p
        }
        for k := 0; k < j; k++ {
            if p&1 == 0 {
                zz[(x+k)*n+y-k] = i
            } else {
                zz[(y-k)*n+x+k] = i
            }
            i++
        }
    }
 
    return zz
}
 
func main() {
    num := 5
    len := 2
    for i, draw := range zigzag(num) {
        fmt.Printf("%*d ", len, draw)
        if i%num == num-1 {
            fmt.Println("")
        }
    }
}

输出:

 0  1  5  6 14 
 2  4  7 13 15 
 3  8 12 16 21 
 9 11 17 20 22 
10 18 19 23 24