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
}