59.go 785 B

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