题目:
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
算法:
和46题比较,backtracking函数已经和num[index]交换过位置的数字nums[i]就不再进行交换
func permuteUnique(nums []int) [][]int {
ans := make([][]int, 0)
var backtrack func(index int)
backtrack = func(index int) {
if index == len(nums) {
ans = append(ans, append([]int{}, nums...))
return
}
swaped := make(map[int]bool)
for i := index; i < len(nums); i ++ {
if i == index || !swaped[nums[i]] {
swaped[nums[i]] = true
nums[index], nums[i] = nums[i], nums[index]
backtrack(index + 1)
nums[index], nums[i] = nums[i], nums[index]
}
}
}
// sort.Slice(nums, func(i, j int) bool {return nums[i] < nums[j]})
backtrack(0)
return ans
}