📑 题目:46. 全排列

🚀 本题 LeetCode 传送门

题目大意

给定一个没有重复数字的序列,返回其所有可能的全排列。

解题思路

  • 求出一个数组的排列组合中的所有排列,用 DFS 深搜即可。

代码

  1. package leetcode
  2. func permute(nums []int) [][]int {
  3. if len(nums) == 0 {
  4. return [][]int{}
  5. }
  6. used, p, res := make([]bool, len(nums)), []int{}, [][]int{}
  7. generatePermutation(nums, 0, p, &res, &used)
  8. return res
  9. }
  10. func generatePermutation(nums []int, index int, p []int, res *[][]int, used *[]bool) {
  11. if index == len(nums) {
  12. temp := make([]int, len(p))
  13. copy(temp, p)
  14. *res = append(*res, temp)
  15. return
  16. }
  17. for i := 0; i < len(nums); i++ {
  18. if !(*used)[i] {
  19. (*used)[i] = true
  20. p = append(p, nums[i])
  21. generatePermutation(nums, index+1, p, res, used)
  22. p = p[:len(p)-1]
  23. (*used)[i] = false
  24. }
  25. }
  26. return
  27. }