题目47:全排列Ⅱ
题目描述:
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
题解:
func permuteUnique(nums []int) [][]int {
res, r:= [][]int{
}, []int{
}
used := make([]bool, len(nums))
if len(nums) == 1{
res = append(res, nums)
}else{
sort.Ints(nums)
backTracking(&res, r, 0, nums, used)
}
return res
}
func backTracking(res *[][]int, r []int, index int, nums []int, used []bool){
if index == len(nums){
tmp := make([]int, len(r))
copy(tmp, r)
*res = append(*res, tmp)
}
for i:=0;i<len(nums);i++{
if used[i] || (i>0 && nums[i]==nums[i-1] && !used[i-1]){
//存在相同的数字但前一个数字并未使用过,应该先使用前一个数组
continue
}
used[i] = true
r = append(r, nums[i])
backTracking(res, r, index+1, nums, used)
used[i] = false
r = r[:len(r)-1]
}
}