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 }