main.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. fmt.Println("hello")
  7. nums := []int{1, 2, 3}
  8. fmt.Println(permute(nums))
  9. }
  10. func permute(nums []int) [][]int {
  11. result := [][]int{}
  12. length := len(nums)
  13. dataMap := make(map[int]bool)
  14. for i := 0; i < length; i++ {
  15. dataMap[nums[i]] = false
  16. }
  17. row := []int{}
  18. var backMethod func(nums []int, length int, row []int)
  19. backMethod = func(nums []int, length int, row []int) {
  20. for i := 0; i < length; i++ {
  21. // if dataMap[nums[i]] {
  22. // return //这里必须得注视掉,因为递归的时候(row[:low(row)-1]),会直接从这个出口出去了。
  23. // }
  24. if !dataMap[nums[i]] {
  25. row = append(row, nums[i])
  26. dataMap[nums[i]] = true
  27. backMethod(nums, length, row)
  28. row = row[:len(row)-1]
  29. dataMap[nums[i]] = false
  30. }
  31. }
  32. if length == len(row) {
  33. row2 := []int{}
  34. for i := 0; i < len(row); i++ {
  35. row2 = append(row2, row[i])
  36. }
  37. result = append(result, row2)
  38. // return
  39. }
  40. }
  41. backMethod(nums, length, row)
  42. return result
  43. }