59.go 798 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func generateMatrix(n int) [][]int {
  6. res := make([][]int, n)
  7. for i := range res {
  8. res[i] = make([]int, n)
  9. }
  10. cnt := 1
  11. x, y := 0, 0
  12. for l := n; l > 0; l -= 2 {
  13. if l == 1 {
  14. res[y][x] = cnt
  15. return res
  16. }
  17. for dir := 0; dir < 4; dir++ {
  18. var xSpeed, ySpeed int
  19. switch dir {
  20. case 0:
  21. xSpeed, ySpeed = 1, 0
  22. case 1:
  23. xSpeed, ySpeed = 0, 1
  24. case 2:
  25. xSpeed, ySpeed = -1, 0
  26. default:
  27. xSpeed, ySpeed = 0, -1
  28. }
  29. for i := 0; i < l-1; i, cnt = i+1, cnt+1 {
  30. res[y][x] = cnt
  31. x, y = x+xSpeed, y+ySpeed
  32. }
  33. }
  34. x, y = x+1, y+1
  35. }
  36. return res
  37. }
  38. func main() {
  39. fmt.Println(generateMatrix(0))
  40. fmt.Println(generateMatrix(1))
  41. fmt.Println(generateMatrix(2))
  42. fmt.Println(generateMatrix(3))
  43. fmt.Println(generateMatrix(4))
  44. }