funcpermuteUnique(nums []int) (res [][]int) { vis := make([]bool, len(nums)) n := len(nums) sort.Ints(nums) var dfs func(nums, path []int, vis []bool) dfs = func(nums, path []int, vis []bool) { if n == len(path) { res = append(res, append([]int(nil), path...)) return }
for i := 0; i < len(nums); i++ { if vis[i] { //该数已经被使用 continue } if i > 0 && nums[i] == nums[i-1] && vis[i-1] == false { continue } vis[i] = true dfs(nums, append(path, nums[i]), vis) vis[i] = false } }