Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example:
Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
需要处理重复出现的整数,其他的跟46题差不多
func permuteUnique(nums []int) [][]int {
res := &[][]int{}
var colors []int
for i := 0; i < len(nums); i++ {
colors = append(colors, 0)
}
sort.Ints(nums)
dfs(nums, []int{}, &colors, res)
return *res
}
func dfs(graph []int, path []int, colors *[]int, ans *[][]int) {
if len(path) == len(graph) {
tmp := make([]int, len(path))
copy(tmp, path)
*ans = append(*ans, tmp)
return
}
for i, v := range graph {
if (*colors)[i] == 1 {
continue
}
if i > 0 && graph[i] == graph[i-1] && (*colors)[i-1] == 1 {
continue
}
(*colors)[i] = 1
dfs(graph, append(path, v), colors, ans)
(*colors)[i] = 0
}
}