package main func generateMatrix(n int) [][]int { res := make([][]int, n) for i := range res { res[i] = make([]int, n) } cnt := 1 x, y := 0, 0 for l := n; l > 0; l -= 2 { if l == 1 { res[y][x] = cnt return res } for dir := 0; dir < 4; dir++ { var xSpeed, ySpeed int switch dir { case 0: xSpeed, ySpeed = 1, 0 case 1: xSpeed, ySpeed = 0, 1 case 2: xSpeed, ySpeed = -1, 0 default: xSpeed, ySpeed = 0, -1 } for i := 0; i < l-1; i, cnt = i+1, cnt+1 { res[y][x] = cnt x, y = x+xSpeed, y+ySpeed } } x, y = x+1, y+1 } return res } /* func main() { fmt.Println(generateMatrix(0)) fmt.Println(generateMatrix(1)) fmt.Println(generateMatrix(2)) fmt.Println(generateMatrix(3)) fmt.Println(generateMatrix(4)) } */