func permuteUnique(num []int) [][]int {
sort.Ints(num)
size := len(num)
resArr := make([][]int, 0)
tmp := make([]int, 0)
isVisited := make([]bool, size)
var dfs func(start int)
dfs = func(start int) {
if start == size {
resArr = append(resArr, append([]int(nil), tmp...))
return
}
for i, val := range num {
//从左至右剔除重复的元素
if isVisited[i] || (i > 0 && !isVisited[i-1] && val == num[i-1]) {
continue
}
tmp = append(tmp, val)
isVisited[i] = true
dfs(start + 1)
tmp = tmp[:len(tmp)-1]
isVisited[i] = false
}
}
dfs(0)
return resArr
}