46. 全排列

image.png

  1. package main
  2. import "fmt"
  3. var mark []int
  4. var n int
  5. func permute(nums []int) [][]int {
  6. n =len(nums)
  7. res:= make([][]int,0)
  8. if n<=0{
  9. return res
  10. }
  11. mark = make([]int,n)
  12. path :=make([]int,0)
  13. dfs(nums,path,&res)
  14. return res
  15. }
  16. func dfs(nums[]int,path[]int,res*[][]int) {
  17. if len(path)==len(nums) {
  18. tmp := make([]int,len(path))
  19. copy(tmp,path)
  20. *res =append(*res,tmp)
  21. return
  22. }
  23. for i :=0;i<len(nums);i++{
  24. if mark[i]==1 {//减掉枝叶
  25. continue
  26. }
  27. path = append(path,nums[i])
  28. mark[i]=1
  29. dfs(nums,path,res)
  30. path = path[:len(path)-1]
  31. mark[i]=0
  32. }
  33. }
  34. //func dfsPath(res*[][]int,path []int,nums []int,idx int){
  35. // if idx ==n{
  36. // tmp := make([]int,n)
  37. // copy(tmp,path)
  38. // *res =append(*res,tmp)
  39. // return
  40. // }
  41. //
  42. // for i:=0;i<n;i++{
  43. // if mark[i]>0 {
  44. // continue
  45. // }
  46. // if len(path)>idx {
  47. // path[idx] = nums[i]
  48. // }else {
  49. // path = append(path,nums[i])
  50. // }
  51. // mark[i] =1
  52. // dfsPath(res,path,nums,idx+1)
  53. // mark[i] =0
  54. // }
  55. //}
  56. func main() {
  57. fmt.Println(permute([]int{1,2,3}))
  58. }

image.png