剑指OfferII083.没有重复元素集合的全排列

题目

给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。

示例 1:输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:输入:nums = [0,1] 输出:[[0,1],[1,0]]

示例 3:输入:nums = [1] 输出:[[1]]

提示:1 <= nums.length <= 6

-10 <= nums[i] <= 10

nums 中的所有整数 互不相同

注意:本题与主站 46 题相同

解题思路分析

1、回溯;时间复杂度O(n^n),空间复杂度O(n*n!)

剑指OfferII083.没有重复元素集合的全排列

var res [][]int

func permute(nums []int) [][]int {
   res = make([][]int, 0)
   arr := make([]int, 0)
   visited := make(map[int]bool)
   dfs(nums, 0, arr, visited)
   return res
}

func dfs(nums []int, index int, arr []int, visited map[int]bool) {
   if index == len(nums) {
      temp := make([]int, len(arr))
      copy(temp, arr)
      res = append(res, temp)
      return
   }
   for i := 0; i < len(nums); i++ {
      if visited[i] == false {
         arr = append(arr, nums[i])
         visited[i] = true
         dfs(nums, index+1, arr, visited)
         arr = arr[:len(arr)-1]
         visited[i] = false
      }
   }
}

2、递归;时间复杂度O(n!),空间复杂度O(n*n!)

func permute(nums []int) [][]int {
   if len(nums) == 1 {
      return [][]int{nums}
   }
   res := make([][]int, 0)
   for i := 0; i < len(nums); i++ {
      tempArr := make([]int, len(nums)-1)
      copy(tempArr[0:], nums[:i])
      copy(tempArr[i:], nums[i+1:])
      arr := permute(tempArr)
      for _, v := range arr {
         res = append(res, append(v, nums[i]))
      }
   }
   return res
}

3、回溯;时间复杂度O(n!),空间复杂度O(n*n!)

var res [][]int

func permute(nums []int) [][]int {
   res = make([][]int, 0)
   arr := make([]int, len(nums))
   dfs(nums, 0, arr)
   return res
}

func dfs(nums []int, index int, arr []int) {
   if index == len(nums) {
      temp := make([]int, len(arr))
      copy(temp, arr)
      res = append(res, temp)
      return
   }
   for i := index; i < len(nums); i++ {
      arr[index] = nums[i]
      nums[i], nums[index] = nums[index], nums[i]
      dfs(nums, index+1, arr)
      nums[i], nums[index] = nums[index], nums[i]
   }
}

总结

Medium题目,题目同leetcode 46.全排列、面试题08.07.无重复字符串的排列组合

展开阅读全文

页面更新:2024-04-28

标签:递归   排列   本题   复杂度   整数   数组   示例   字符串   顺序   题目   思路   元素   提示   答案   时间   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top